Easyui Tree跨域获取数据。

js语言为了安全,是不允许跨域访问数据的。有时候因为项目需要,我们需要从不同的域中获取数据,当然是有解决方法的。JSONP,是JSON with padding(填充式JSON或参数式JSON)的缩写,JSONP看起来和JSON差不多,只不过是被包含在函数调用中,类似这样

callback({"name":"mike"});

JSONP由两部分组成:回调函数和数据。
回调函数是当响应到来是应该在页面中调用的函数,函数一般在请求中指定。
数据就是传入回调函数中的JSON数据。下面就是一个JSONP请求:

http://127.0.0.1/json/?callback=handleResponse

这里指定的回调函数就是handleResponse();
Jquery提供了$.getJSON(),来进行跨域访问数据。
下面看具体的代码
前台代码

$.getJSON("http://localhost:8082/treeData?callback=?",function(treeData){
            console.log("进入getJSON");
            console.log(treeData);
            $("#tt").tree({
                 data:treeData,
                 onSelect:function(node){
                     $(this).tree('expand',node.target);
                 }
            }); 
        });

后台,在不同的域中

@RequestMapping(value="treeData",produces=MediaType.APPLICATION_JSON_VALUE+";charset=utf-8")
    @ResponseBody
    public String getData(String callback){

         List<Tree> resultData = resultData(0);
         //封装的一个方法,将List转换为String
         String jsonString = JsonUtils.objectToJson(resultData);
         //获取树的数据
         //拼接成JSONP格式返回
         return callback+"("+jsonString+");";
    }

    /**
     * 生成树
     * @param parentId
     * @return
     */
    public List<Tree> resultData(long parentId){
        //根据根节点id获取子节点数据
        List<TbItemCat> topList = tbItemCatMapper.getItemList(parentId);
        List<Tree> resultTree=new ArrayList<Tree>();
        //遍历子节点
        for (TbItemCat tbItemCat : topList) {
            Tree tree=new Tree();
            tree.setId(tbItemCat.getId());
            tree.setText(tbItemCat.getName());
            //判断是否有子集
            if (tbItemCat.getIsParent()) {
                tree.setState("closed");
                //递归获取数据
                tree.setChildren(resultData(tbItemCat.getId()));
                resultTree.add(tree);
            }else {
                resultTree.add(tree);
            }
        }
        return resultTree;
    }

这样就可以完成跨域获取数据的方法了。
前台还可以使用$.ajax()的方式来获取数据。

$.ajax({
            type:'POST',
            url:'http://localhost:8082/treeData?abc=fun1',
            dataType:'jsonp',
            jsonpCallback:'fun1',
            success:function(data){
                console.log(data);
            },
            error:function(data){
                console.log("error");
                console.log(data);
            }
        });
//定义回调函数,获取后到达客户端会立刻执行
function fun1(resultData){
    //返回来之后立即执行
    datas=data;
    console.log("进入fun1");
    console.log(data);
    $("#tt").tree({
         data:resultData
    }); 
}

一样是可以成功返回数据的。
欢迎交流讨论QQ:425548678

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值