【发布时间】:2020-06-22 03:36:19
【问题描述】:
我正在尝试通过带有 foreach 循环的 ajax 上传多个图像以停止内存限制错误。所以下面的代码段按我的意愿运行,但如果它返回错误我不能打破循环。我在这里所做的是通过 ajax 错误函数分配 false 然后返回它。所以循环应该是一个中断。但它没有按应有的方式工作。如果我在错误函数中console.log(noErrors) 打印错误。但是在错误函数之后它再次返回true。我不知道为什么会这样。请帮忙
var selectedFiles = $('input[name="img_path[]"]')[0].files;
var i = 1;
var noErrors = true;
$.each(selectedFiles, function (index, value) {
var form_data = new FormData();
form_data.append('image', value);
$.ajax({
url: "{{route('supplier.project-add-images-ajax')}}",
data: form_data,
method: 'post',
cache: false,
dataType: 'json',
contentType: false,
processData: false,
success: function (response) {
console.log(selectedFiles.length);
/* if (i == selectedFiles.length) {
alert(1);
}*/
},
error: function (response) {
$.post("{{route('supplier.project-remove-temp-directory')}}");
alert('Each image shouldn\'t exceed 1mb');
noErrors = false;
},
});
return noErrors;
});
我也试过这个,但它也不起作用。调用一个从 ajax 调用返回 false 的函数
error: function (response) {
returnFalse();
$.post("{{route('supplier.project-remove-temp-directory')}}");
alert('Each image shouldn\'t exceed 1mb');
}
这将返回错误
function returnFalse(){
return false;
}
【问题讨论】:
-
对我来说我会准备需要的参数,所以我只能执行一次AJAX。
-
在这里我不能这样做,因为我需要每次上传每个文件
-
尝试在
$.ajax行之前放置一个console.log("Starting", index);,您会看到这些都在它们中的任何一个通过success或error回调完成之前被记录下来,因为success和error回调在将来的某个时候被调用。您的循环不会等待他们。要修复它,您可以启动第一个请求,并且只在success回调中启动第二个请求。 -
@user2740650 感谢您的评论,您能帮我用我的代码解决这个问题吗
标签: php jquery laravel loops break