【问题标题】:Ajax call in loopAjax 循环调用
【发布时间】:2015-06-01 11:15:01
【问题描述】:

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

我定义了一个函数来调用 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 循环(可能是异步的)

提前致谢..!!!

【问题讨论】:

  • moving without completing loop 的解释完全不清楚……这是什么意思?
  • 意思是在没有完成for循环的情况下继续前进......
  • 接下来会发生什么?您需要更清楚地解释问题。如果所有这些请求都需要在其他代码执行之前完成,您将需要使用 Promise 来执行下一个代码序列
  • 服务器如何知道组合这些切片?
  • 我不知道你在说什么!真的。还是想不通。

标签: javascript jquery ajax json for-loop


【解决方案1】:

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 中的其他变量是全局定义的。

更新说明:

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

【讨论】:

    猜你喜欢
    • 2012-03-03
    • 2015-04-28
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2015-11-02
    • 2016-07-13
    相关资源
    最近更新 更多