Laravel服务器未收到FormData的追加文件

时间:2019-04-05 01:16:15

标签: javascript laravel laravel-5 xmlhttprequest

我正面临一个奇怪的问题……我有一个包含多个字段的表单..在表单提交上,我将多个图像文件附加到表单数据中并像这样提交:

            $('#newEntry').on('submit', function(e){
                e.preventDefault();
                const formData = new FormData(e.target);

                formData.delete('images[]');

                for (var i = 0; i < filesToUpload.length; i++) {
                    formData.append('images[]', filesToUpload[i].file, filesToUpload[i].file.name);
                }
                $(this)[0].submit();
            });

当我尝试在Laravel服务器上使用echo(count($request->images))时,它会回显0 ..并在dd($request)上显示..我看到了空文件数组

但是当我直接从input字段提交具有相同文件的相同表单而不是像这样向其附加数据时:

<input type="file" name="images[]">

我在服务器上收到所有文件。

文件已成功附加到formData上。.我已经通过以下方式进行了检查:

                var formKeys    = formData.keys();
                var formEntries = formData.entries();

                do {
                  console.log(formEntries.next().value);
                } while (!formKeys.next().done)

我还尝试过通过AJAX发送相同的附加文件,并且效果很好:

             $('#newEntry').on('submit', function(e){
                e.preventDefault();
                const formData = new FormData(e.target);

                formData.delete('images[]');

                for (var i = 0; i < filesToUpload.length; i++) {
                    formData.append('images[]', filesToUpload[i].file, filesToUpload[i].file.name);
                }

                $.ajax({
                    url: actionURL,
                    data: formData,
                    processData: false,
                    contentType: false,
                    type: "POST",
                    success: function (data) {
                        alert("DONE");
                    },
                    error: function (data) {
                        alert("ERROR - " + data.responseText);
                    }
                });
             });

深入研究..我发现,当我通过Http提交表单时,控制台中会出现一则代码为500 Internal Server Error的错误(仅在页面重新加载之前)

尝试了所有内容,但不知道是什么原因导致了这种奇怪的行为..请帮助我解决问题

1 个答案:

答案 0 :(得分:0)

您可以检查浏览器的network标签(最好是Chrome),以比较发送到服务器的请求参数。

如果请求太快而无法捕获,请尝试将debugger;(或在“源”选项卡中的代码行的前面单击)放入Javascript代码以停止执行重新加载之前的代码。然后,您可以检查Javascript的当前状态以及收到的500响应。