playframework运用Extjs中jsonp请求实现跨域

1.首先我们看下jsonp的请求格式

Ext.data.JsonP.request({  
              url: 'http://10.196.83.53:9000/WebService/ClassDirWS/getObjectNode?nodeId=5',  
             timeout: 300000,
             callbackKey: "jsonPCallback",  
             success: function(result) {  
                 //alert(result);
				 console.log(result);
				 var str = JSON.stringify(result);
				 alert(str);
      
             },  
             failure: function(result) {  
                 alert(result);  
             }  
         });
这里我请求的是服务器上的一个地址 http://10.196.83.53:9000/WebService/ClassDirWS/getObjectNode?nodeId=5

这里需要注意的是回调函数的回调键callbackKey:“jsonPCallback”,我们需要通过这个键来获取回调函数名,下面是我们真正请求时浏览器发送的链接:http://10.196.83.53:9000/WebService/ClassDirWS/getObjectNode?nodeId=5&jsonPCallback=Ext.data.JsonP.callback1&_dc=1482201455975  这里的Ext.data.JsonP.callback1就是我们要获取的函数名,后面的_dc=1482201455975 这个是随机参数值,JS会被浏览器缓存,后面加个随机数, 保证每次请求都是新文件

2.其次我们看一下我们的play路由设置

GET    /WebService/ClassDirWS/getObjectNode     webService.classDirWS.controllers.MainService.getObjectNode(nodeId:String,jsonPCallback:String)
注意这里的接收参数需要和callbackKey:“jsonPCallback”一模一样

3.我们的MainServie.java文件中可以看到接收参数的形式

public static Result getObjectNode(String nodeId,String jsonPCallback){
        response().setContentType("text/javascript; charset=UTF-8");
        response().setHeader(ACCESS_CONTROL_ALLOW_ORIGIN,"*");
        //处理过程省略。。。。。。
        return ok(jsonPCallback+"("+str+")");

    }

最后形成的返回jsonp格式形如这种格式Ext.data.JsonP.callback1(str),Ext.data.JsonP.callback1这个函数名就是动态获取的,括号里面是你需要传递的数据,这就满足了对Ext.data.JsonP.callback1(参数)函数的调用

总结:其实jsonp就是通过javascript标签不受跨域限制这一特性,通过服务器端拼接好客户端js函数调用形式,然后对客户端js函数的进行调用,实现数据的传输。







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值