Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我能';似乎没有打破$each()循环_Javascript_Jquery_Ajax_Each - Fatal编程技术网

Javascript 我能';似乎没有打破$each()循环

Javascript 我能';似乎没有打破$each()循环,javascript,jquery,ajax,each,Javascript,Jquery,Ajax,Each,如果ajax返回错误,我似乎无法打破我的each循环。我试过了 return false; 和其他类似的东西,但美元。每个仍然继续运行 我需要能够做到这一点,以便在通过ajax发布后显示来自后端的错误消息(我知道这是一种不好的做法,但是客户端需要能够同时发送多个表单) 谁能解释我做错了什么 var postAll = function(button_clicked) { e.preventDefault(); var form_response = []; var formsColle

如果ajax返回错误,我似乎无法打破我的each循环。我试过了

return false;
和其他类似的东西,但美元。每个仍然继续运行

我需要能够做到这一点,以便在通过ajax发布后显示来自后端的错误消息(我知道这是一种不好的做法,但是客户端需要能够同时发送多个表单)

谁能解释我做错了什么

var postAll = function(button_clicked)
{
 e.preventDefault();

 var form_response = [];
 var formsCollection = document.getElementsByTagName("form");

 $.each(formsCollection, function (key, value)
 {
   console.log(value.action);
   console.log(value.id);

   var url = value.action;
   var id = value.id;
   var data = ($('#' + id + '').serialize());


   if (id == 'additionalInfo')
   {
      data = {'Add_info': $('#Add_info').val(),};
   }

    if (id != 'DONE')
   {
      $.ajax({
        type: "POST",
        dataType: 'json',
        url: url,
        beforeSend: function (xhr)
       {
          xhr.setRequestHeader('X-CSRF-TOKEN',$("#token").attr('content'));
        },
        data: data,
        success: function (data)
       {
          console.log('success'); // show response from the php script.
          form_response.push(data); // show response from the php script.
        },
        error: function (data)
        {
          console.log('fail'); // show response from the php script.
          display_errors(data, id); // show response from the php script.
          return true;
        }
      });
    }
 });
}

如果打破循环是指错误处理程序中的
返回
,那么它将不会像您认为的那样工作

循环“立即”创建异步请求。然后这些请求中的每一个都由浏览器处理(或多或少同时处理),然后是响应。因此,当错误处理程序运行时,循环早已完成

顺便说一句,本例中的返回与错误处理程序相关,而不是与循环中的函数相关

因此,为了实现您想要的,您应该将AJAX请求“排队”并逐个执行


一种可能的解决方案是创建一个表单数组,然后接受(并将其从数组中删除)第一个表单,执行请求,对响应重复整个过程,并不断重复,直到数组为空。

AJAX在执行$时是异步的。每个函数都将执行AJAX调用并“不等待”让其他人完成

为了解决您的问题,您必须编写一个函数来执行第一个ajax调用,如果成功,它将在第二个ajax调用中再次执行自己

例如:

var data = [form1,form2...etc];
function letsLoop(data,index = 0){
    $.ajax({
        url:....
        success: function(){
            letsLoop(data,index+1);
        },
        error: function(){

        }
    });
}
这里你调用你的函数:

letsLoop(data,0);

到底是什么工作不正常?您的意思是,如果任何请求失败,您希望提前退出
每个
迭代吗?它们当前是异步执行的,因此它们都可以在第一个之前发送returns@PeterMader我把它放在一个for循环中,但发现每一个都比我能帮助的要好一点:)