多个异步ajax请求如何指定顺序执行,急!!!!

linyfei 2014-10-22 10:27:54
先上代码:

function loads(){
var initPath = 'http://192.168.81.177:8089/di-data-service/';
var reports = ['cpu_report','mem_report','load_report','network_report'];
var currentPath = initPath + 'r=day&json=1&cName=' ;

$.each(reports,function(index,report){
rendering( currentPath +report , index );
})
}

function rendering(data , index ){
$.ajax({
url: url,
type : "get",
dataType:'jsonp',
jsonp:"jsonpCallback",
success: function(result) {
//parse result , logic
//logicFun(result , index );
console.log('rendering - '+index);
}
}

function logicFun(data , index ){
//parse data , logic
console.log('logicFun - '+ index );
}


页面在加载完毕后执行loads函数,进行页面数据的渲染,需要注意到的是:我需要最终在控制台(chrome测试)打印出来的是按照reports数组的升序,问题是:无论是否将逻辑操作进行封装(调用logicFun函数)打印出来的还是不封装,得到的结果都是乱序,我最终需要达到的目的是要升序,麻烦大神们帮忙给些意见。

PS:必须异步,页面请求比较多,同步会导致页面卡死。而异步就存在这个顺序问题,有看到些资料提到队列、绑定,不过本人没找到具体其他资料,如哪位大神知道,还望帮忙解惑,谢谢啦!紧急贴!
...全文
9254 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
似梦飞花 2014-10-22
  • 打赏
  • 举报
回复
将要发送的数据和地址放到一个数组里 每次ajax返回成功pop后递归执行发送方法试试
Go 旅城通票 2014-10-22
  • 打赏
  • 举报
回复
自己写代码来控制执行循序,而不是直接for,each并发执行,做递归调用
    function loads() {
        var initPath = 'http://192.168.81.177:8089/di-data-service/';
        var reports = ['cpu_report', 'mem_report', 'load_report', 'network_report'];
        var currentPath = initPath + 'r=day&json=1&cName=';

        rendering(currentPath, 0, reports);
        /*
        $.each(reports, function (index, report) {
            rendering(currentPath + report, index);
        })*/
    }

    function rendering(currentpath, index,reports) {
        $.ajax({
            url: currentpath + reports[index],
            type: "get",
            dataType: 'jsonp',
            jsonp: "jsonpCallback",
            success: function (result) {
                //parse result , logic
                //logicFun(result , index );
                console.log('rendering - ' + index);

                index++;
                if (index < reports.length) rendering(currentpath, index, reports);

            }
        });
    }

    function logicFun(data, index) {
        //parse data  , logic
        console.log('logicFun - ' + index);
    }
slwsss 2014-10-22
  • 打赏
  • 举报
回复
看下这个http://www.jb51.net/shouce/jquery1.82/jQuery.when.html http://www.cnblogs.com/charling/p/3411385.html
linyfei 2014-10-22
  • 打赏
  • 举报
回复
引用 1 楼 slwsss 的回复:
用同步的 .ajax({ url: url, type : "get",async:false, dataType:'jsonp', jsonp:"jsonpCallback", success: function(result) { //parse result , logic //logicFun(result , index ); console.log('rendering - '+index); }
本人需求明确不能同步,同步就不必这么调用ajax了
slwsss 2014-10-22
  • 打赏
  • 举报
回复
用同步的 .ajax({ url: url, type : "get",async:false, dataType:'jsonp', jsonp:"jsonpCallback", success: function(result) { //parse result , logic //logicFun(result , index ); console.log('rendering - '+index); }

87,903

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧