异步ajax请求如何控制执行循序

  ajax多个请求时,如果下一次请求依赖上一次的请求结果,或者希望能按照请求循序先后返回,而不是乱序返回,需要自己写代码控制ajax的执行循序,而不是for或者jquery的each并发发起ajax请求,这样无法控制ajax的返回循序。当然如果你不想用异步请求,改为同步请求可以控制for,each的并发ajax请求返回循序,但是对于jsonp这种只能异步加载的数据,async配置并没有效果。

 

  解决办法:自己写逻辑控制ajax的执行循序,在上一次请求结束后再继续发送下一次的请求,做递归调用。不过有个问题,对于jsonp,如果动态页出错,会导致不会触发success/error,后续的请求无法继续。

 

  异步ajax请求控制执行循序代码递归结构

    function loads() {
        var reports = ['cpu_report', 'mem_report', 'load_report', 'network_report'];
        var url = 'data.ashx?job=';
        rendering(currentPath, 0, reports);
        /*//不能用each或者for进行递归调用,无法控制返回的循序
        $.each(reports, function (index, report) {
            rendering(url + report, index);
        })*/
    }
    function rendering(url, index,reports) {
        $.ajax({
            url: url + reports[index],
            type: "get",
            dataType: 'jsonp',
            jsonp: "jsonpCallback",
            success: function (result) {
                console.log('rendering - ' + index);
                index++;//递归调用
                if (index < reports.length) rendering(url, index, reports);
            }
        });
    }

 

加支付宝好友偷能量挖...


原创文章,转载请注明出处:异步ajax请求如何控制执行循序

评论(0)Web开发网
阅读(219)喜欢(0)JavaScript/Ajax开发技巧