您的位置:首页 > 其它

关于ajax跨域问题josnp的解决方案

2015-06-05 17:36 507 查看
以前用ajax时,都是内网调取url地址,但这次的项目牵扯到了跨域(比如我的url地址是:www.baidu.com,我得去访问百度,并想获取respone数据,即get请求),上网查说是josnp协议可以解决这个问题,于是翻阅了好多资料,也自己尝试了好多遍,才终于解决了这一问题。

首先在客户端:

       在js中的ajax请求里,按如下标准写:

       var sData        ='interval'+interval+'&stime='+todaybegin+'&etime='+todayend+'&routerIP='+routerIP+'&Sas_id='+Sas_id; 

      jQuery.support.cors = true;

     $.ajax({
async :false,
type : "get",
data        : sData,
url : "http://172.16.42.135:8080/sas/",
dataType    :'JSONP',
jsonpCallback: 'datas',
contentType : "application/jsonp; charset=utf-8",

      success : function(responseText, textStatus, XMLHttpRequest){
var saslist = responseText.saslist;  //取出jsonp数据

     }

    以上的 红体字很重要,其中jsonpCallback: 'datas',中datas是由服务器端决定的。详细见如下:

   服务器端定义的json格式为:

  datas("saslist": [

      {

         "packets": 123, 

         "bytes": 1200, 

         "flows": 100, 

         "time": "2015-06-05 09:10:00"

      }, 

      {

         "packets": 123, 

         "bytes": 1300, 

         "flows": 100, 

         "time": "2015-06-05 09:15:00"

      }, 

      {

         "packets": 123, 

         "bytes": 1400, 

         "flows": 100, 

         "time": "2015-06-05 09:20:00"

      }, 

      {

         "packets": 123, 

         "bytes": 1200, 

         "flows": 100, 

         "time": "2015-06-05 09:25:00"

      }, 

      {

         "packets": 123, 

         "bytes": 1100, 

         "flows": 100, 

         "time": "2015-06-05 09:30:00"

      }, 

      {

         "packets": 123, 

         "bytes": 1000, 

         "flows": 100, 

         "time": "2015-06-05 09:35:00"

      }])

     相当于是客户端调服务器端某函数一样,saslist可视作函数名,这样写虽说有欠缺,但有助于理解就好。总之处理过程就两处:一:客户端的红体字;二:服务器端起相应jsonpCallback一样的名字供调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: