Jquery AJAX循环在开始下一个请求之前未完成第一个请求

Jquery AJAX循环在开始下一个请求之前未完成第一个请求,jquery,ajax,Jquery,Ajax,我试图创建一个简单的脚本,它循环遍历表中的所有输入,并为每个值大于1的输入提交一个AJAX GET请求。出于某种原因,我的脚本似乎从未成功地完成所有AJAX请求。我知道如果我在AJAX请求上设置async:false,它会成功,但这不是最佳实践,也会降低浏览器的速度 有没有办法解决这个问题?我搜索了所有地方,找到了许多相关的答案,但未能找到脚本的修复方法 $('#OrderSubmit').click(function() { $('.OrderForm').find('.pid-inp

我试图创建一个简单的脚本,它循环遍历表中的所有输入,并为每个值大于1的输入提交一个AJAX GET请求。出于某种原因,我的脚本似乎从未成功地完成所有AJAX请求。我知道如果我在AJAX请求上设置
async:false
,它会成功,但这不是最佳实践,也会降低浏览器的速度

有没有办法解决这个问题?我搜索了所有地方,找到了许多相关的答案,但未能找到脚本的修复方法

$('#OrderSubmit').click(function() {
    $('.OrderForm').find('.pid-input').each(function(j, element) {
        qty = $(element).val();
        if (qty > 0) {
            pid = $(element).data("pid");
            $.ajax({ 
                url: "/cart.php?action=add&product_id=" + pid + "&qty=" + qty 
            });
        }
    });
});
你的代码看起来不错
可能是您在循环中发送请求。从服务器端可能会对来自一个客户端的后续请求进行限制。
这是可能的,因为只需连续发送请求,就可以使服务器崩溃或降低服务质量。
如果满足服务器要求,请尝试提供几毫秒的超时时间

$('#OrderSubmit').click(function() {
var i=0;
$('.OrderForm').find('.pid-input').each(function(j, element) {
    qty = $(element).val();
    if (qty > 0) {

        i++;
        pid = $(element).data("pid");
        setTimeout(function(pid,qty)
          {
      $.ajax({ 
            url: "/cart.php?action=add&product_id=" + pid + "&qty=" + qty 
        });
          }.bind({},pid,qty),i*1000);

    }
});
});

您是否正在阻止提交表单?顺便说一句,为什么不只向服务器发送一个请求,处理所有相关数量的产品ID?而不是发送X个数量的AJAX请求,将所有
.pid input
字段的值放入一个请求并发送。因为服务器端脚本是封闭源代码的,不受我的控制…除了执行单个请求之外没有其他选择…异步调用就是这样工作的。。。Ajax调用不会暂停循环。你要么需要使用承诺,要么重新思考你是如何做循环的。你问题的标题说你想等待一个请求完成,然后再开始下一个请求。但是你说你的脚本没有成功地完成所有的请求。这些有什么关系?在我看来,由于表单提交,浏览器正在导航到另一个页面,因此请求未完成。