jQuery 跨域请求出错 XMLHttpRequest cannot load 解决办法

要讨论的是浏览器端的真正跨域访问,推荐的是目前jQuery $.ajax()支持get方式的跨域,这其实是采用jsonp的方式来完成的.

//jsonp 方式 beforeSend 与 error 方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了

$.ajax({

    async : false,

    url : '跨域URL',

    type : "GET",

    dataType : 'jsonp',

    jsonp : 'callback',

    data : {

        q : '参数,不多说'

    },

    timeout : 5000,

    success : function(json) {

        //客户端jquery预先定义好的callback函数,

        //成功获取跨域服务器上的json数据后,会动态执行这个callback函数

        if (json.xx) {

            alert(json.xx);

        }

    }

});

  

//还有一种方式是上例$.ajax({..}) api的一种高级封装,对有些$.ajax api底层的参数就被封装而不可见了.

$.getJSON("跨域URL?q=" + value + ";jsoncallback=?",

    function(json) {

        if (json.属性名 == 值) {

            // 执行代码

        }

    });

jsonp的最基本的原理是:

动态添加一个<script type=”text/javascript”></script>标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了. 这样其实”jQuery AJAX跨域问题”就成了个伪命题了,jquery $.ajax方法名有误导人之嫌. 如果设为dataType: ‘jsonp’, 这个$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议. JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。如果要进行跨域请求,我们可以通过使用html的script标记来进行跨域请求,并在响应中返回要执行的script代码,其中可以直接使用JSON传递javascript对象。这种跨域的通讯方式称为JSONP。

 

另:

JSONP跨域请求数据报错 “Unexpected token :”的解决办法

(一)  正常的JqueryAajx跨域请求:

返回数据json串,不做处理直接返回,不多说

(二) Jquery Jsonp请求

返回的json串要修改一下: callback( strJson );

 

 

例:正常的JqueryAajx跨域请求返回参数

 String strJson = "[{"id":"111"},{"id":"222"}]" ,正常返回不做处理。

jsonp请求应做如下处理

 String callback = getParameter("callback");

 String strJson = "[{"id":"111"},{"id":"222"}]"

strJson  =  callback.concat("(").concat(strJson).concat(")")

返回 strJson;

转载于:https://my.oschina.net/u/2560963/blog/1630469

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值