javascript - 在循环中使用 $.post()

标签 javascript jquery post

我可能在这里做了一些非常愚蠢的事情。基本上一个用户可以有多个“站点”,对于每个站点,我们必须运行一些计算来得出总数。我们有一个执行这些计算的 php 页面,我们可以将其称为 calculate.php。它返回一个字符串 ex: 50 然后我们将其解析为 JS 中的 float。所以这就是我想要做的:获取 calculate.php 输出的所有数字的总和。

我的想法是遍历站点,在每次迭代中从 $.post() 到 calculate.php(其他事情也在循环中完成,不太重要)并添加到回调函数中的变量。我相信我的问题是 $.post() 是异步的...这是我的示例代码:

function systems(siteList){

    var runningTotal = 0;

    for (var ii=0,i<siteList.length,i++){

         $.post("calculate.php",{foo:siteList[ii]},function(data){

        // important part
        runningTotal = runningTotal + data

        })

    }

    //outside loop
    alert(runningTotal)

}

这个功能可能不完美,但我真正的问题是如何才能获得我在这里寻找的结果?正如您所知,使用上述代码,runningTotal 总是以 0 告警。

谢谢

编辑:感谢大家的帮助。据我所知,使用如此多的 AJAX 调用对我来说是不明智的,所以与其直接解决这个问题,我相信我会退后一步,接受只发送一个 ajax 回调来执行任务的建议为我总结。再次感谢

最佳答案

我建议使用 $.when并在所有 Ajax 调用完成后运行回调。在那一刻,您可以访问每个 Ajax 调用的响应,并且可以执行任何必要的计算。

例如:

function systems(siteList){

    var promises = [];

    for (var ii=0; i<siteList.length; i++){
        // `$.post` returns a promise. We keep track of each promise.
        promises.push($.post("calculate.php",{foo:siteList[ii]}));
    }

    $.when.apply($, promises).then(function() {
        // this is called once the responses of all Ajax calls 
        // have been received
        var sum = 0;
        for (var i = 0, l = arguments.length; i < l; i++) {
            sum += +arguments[i][0]; // value must be cast to number first
        }
        alert(sum)
    });
}

查看 jQuery 文档以了解有关 promise 的更多信息:http://learn.jquery.com/code-organization/deferreds/ .


不过,一般来说,发出尽可能少的 Ajax 请求会更好。如果您可以更改服务器端代码,我会将其更改为接受一系列值,而不仅仅是一个值,并让服务器返回最终结果。

关于javascript - 在循环中使用 $.post(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17978808/

相关文章:

javascript - 为什么我的 body 在从 React JS 前端进行 post 调用时总是空的

python - 尝试设置 cookie 但得到 TypeError : string indices must be integers, not str

javascript - 自动完成建议输入框填充条形码扫描仪

javascript - AngularJS:触摸屏上的 ng-mouseOver

javascript - 当元素被放入其中时,使可放置的 div 展开。使用可拖动的 jquery ui

jquery - 如何一次为一组 jQuery 对象制作动画(而不是一次全部动画)

javascript - 幻灯片显示不正确的问题

ios - AF 网络 2.0 : Cannot POST with JSON from IOS

javascript - 循环遍历 JSON 对象

javascript - PHP 从数据库中检索新图像