目录

关于jsonp的同步问题

目录

关于jsonp的同步问题

最近开始移动开发,因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;
            }
        });
    }
});