【问题标题】:jQuery foreach loop for ajax dosent get break via return falseajax 的 jQuery foreach 循环不会中断 vs 返回 false
【发布时间】: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);,您会看到这些都在它们中的任何一个通过successerror 回调完成之前被记录下来,因为successerror 回调在将来的某个时候被调用。您的循环不会等待他们。要修复它,您可以启动第一个请求,并且只在 success 回调中启动第二个请求。
  • @user2740650 感谢您的评论,您能帮我用我的代码解决这个问题吗

标签: php jquery laravel loops break


【解决方案1】:

试试这个:

var selectedFiles = $('input[name="img_path[]"]')[0].files;

    $.each(selectedFiles, function (index, value) {
        if (upload(value) === false) {
            return false;
        }
    });

    function upload(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');
                return false;
            },
        });
    }

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 2020-07-16
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2022-10-23
    相关资源
    最近更新 更多