关于jsonp的同步问题

来源:互联网 发布:生命最后的读书会 知乎 编辑:程序博客网 时间:2024/06/07 01:09

最近开始移动开发,因json无法跨域请求的问题,选择了以jsonp的形式向服务器传输数据,为使请求以同步方式执行,在ajax参数中加入了async:false,但出现各ajax块返回的数据混乱问题。经查明,jsonp不支持async:false属性。错误的代码块如下:

$.ajax({    url : 'xxx',    data : {        xxx : xxx,        xxx : xxx    },    dataType : 'jsonp',    jsonpCallback : 'callback',    async : false,//此处是jsonp不支持的参数    success : function (data) {        //do something;    }});
  • 原理:
    ajax和jsonp本质上不同。
    ajax是通过XMLHttpRequest获取非本页内容,而jsonp核心实质上是通过动态添加script标签调用服务器提供的js脚本。
    故jsonp方式只是形式和json相似,本质不同,无法使用async参数。

  • 解决方式:
    将要同步执行的jsonp代码块写在执行成功的success方法中。

$.ajax({    url : 'xxx',    data : {        xxx : xxx,        xxx : xxx    },    dataType : 'jsonp',    jsonpCallback : 'callback',    success : function (data) {        //do something;        $.ajax({            url : 'xxx',            data : {                xxx : xxx,                xxx : xxx            },            dataType : 'jsonp',            jsonpCallback : 'callback',            success : function (data) {                //do something;            }        });    }});
0 1
原创粉丝点击