Javascript 我能';似乎没有打破$each()循环
如果ajax返回错误,我似乎无法打破我的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
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循环中,但发现每一个都比我能帮助的要好一点:)