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

来源:互联网 发布:淘宝网管理团队 编辑:程序博客网 时间:2024/05/21 07:58

以前用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一样的名字供调用。

0 0