Ajax调用循环

时间:2015-06-01 11:15:01

标签: javascript jquery ajax json for-loop

我知道有很多问题,但我仍然无法找到一个正确的答案,使我的代码正常运行。

我有一个函数定义为调用ajax,由于安全问题我无法更改。这就是我称之为该功能的方式

var JsonIQDetails = JSON.stringify(input);//Some input

//pram 1:MethodUrl, 2:JsonObject, 3:ReturnType, 4:SuccessCallBackFunction
InvokeAjaxCall(Url, JsonIQDetails, "json", Success); 

我有对象数组(超过500个)。由于JSON变得很长,所以我无法进行ajax调用。再次由于安全问题,我也无法更改配置文件。所以JSON长度不能增加。

我将数组划分为100个小块并调用方法

for (i = 0, j = mainObject.length; i < j; i += chunk) {
    var newSubObject = mainObject.slice(i, i + chunk);
    InvokeAjaxCall(Url, newSubObject, "json", Success);

    function Success(data) {
        if (!data) {
            alert("Failed");
            break;
        }
    }
}

它在没有完成for循环并执行下一个代码的情况下移动。所以我想首先完成for循环(可能是异步)

先谢谢.. !!!

1 个答案:

答案 0 :(得分:0)

Ajax默认是异步的,所以你几乎需要在你的成功函数中调用你的ajax调用的下一部分。这是一个负责处理的递归循环。

var ajaxRecursive = function(i, j, c){
    if(i < j){
       var newSubObject = mainObject.slice(i, i + chunk);
       InvokeAjaxCall(Url, newSubObject , "json", function(data){
           //do stuff with data
           ajaxRecursive(i+=chunk, j,chunk);
       });
    }
}


ajaxRecursive(0, mainObject.length, chunk);

假设ajaxRecursive中的其他变量是全局定义的。

更新说明

  • 您可以摆脱“成功”功能,只需匿名创建。