1

我很困惑。在此代码的情况下:

function prepareit(list){
    for(i=0;i<list.length;i++){
         var test = list[i];
         $.ajax({....});
    }
}

function testit(list){
    for(i=0;i<list.length;i++){
         var test = list[i];
         $.ajax({....});
    }
}

$(document).ready(function() {
    var list = ['ti','meti','medes','fra','u','w','ro','sit','hd','i'];
    prepareit(list);
    testit(list);
});

当“prepareit”完成时,我需要执行函数“testit”。我已经尝试过使用“when-then”方法,但功能同时启动。

(对不起,我的英语不好)

4

2 回答 2

1

创建一个延迟对象,该对象在所有 ajax 请求完成后解析。

function prepareit(list){
    var defArr = [];
    for(i=0;i<list.length;i++){
         var test = list[i];
         defArr.push($.ajax({....}));
    }
    return $.when.apply($,defArr);
}

function testit(list){
    var defArr = [];
    for(i=0;i<list.length;i++){
         var test = list[i];
          defArr.push($.ajax({....}));
    }
    return $.when.apply($,defArr);
}

$(document).ready(function() {
    var list = ['ti','meti','medes','fra','u','w','ro','sit','hd','i'];
    prepareit(list).done(function(){
        testit(list).done(function(){
            alert("All done!");
        });
    });
});
于 2012-11-14T16:42:12.377 回答
0

您可以在 中调用testitajax 请求的成功函数prepareit,如下所示:

function prepareit(list){
    for(i=0;i<list.length;i++){
         var test = list[i];
         $.ajax({ success: function (data) { testit(list); } });
    }
}

function testit(list){
    for(i=0;i<list.length;i++){
         var test = list[i];
         $.ajax({....});
    }
}

$(document).ready(function() {
    var list = ['ti','meti','medes','fra','u','w','ro','sit','hd','i'];
    prepareit(list);
    //testit(list);
});

但是,如果您依赖于在“测试”之前“准备”整个列表,这将不起作用。我想说循环 ajax 请求不是最好的方法——如果可能的话,你应该改变你的代码以在 ajax 调用中传递整个列表,而不是循环多次(不知道你想要完成什么课程)。

于 2012-11-14T16:39:53.603 回答