JS:带有文件输入的FormData正在崩溃Ajax请求

时间:2018-06-05 19:38:32

标签: javascript jquery ios ajax form-data

有一个非常奇怪的问题,直到我将我的代码推送到实时服务器并尝试将其用于我的iPhone时才显示。

这是提交到我已设置为记录所有传入请求的node.js脚本(以及标题和方法),并且当下面的问题出现时,日志显示没有收到任何内容。

所以无论如何:

$('#addrecord').on('submit', function(e) {
e.preventDefault();
var url = '/admin/app/addrecord'
    var data = $('#addrecord')[0];
    var formData = new FormData(data);

            $.ajax({ // create an AJAX call...
             data: formData,
             processData: false,
             contentType: false,
             cache: false,
             type: "POST", // GET or POST
             url: url, // the file to call
             success: function(response) { // on success..
                if (response.name == 200) {
                    if (response.message == "add") {addComplete(response.address);}
                    else {editComplete(response.address);};
                 }
                 else {
                    console.log("Form Rejected");        
                 }  
              },
              error: function(response) { 
                console.log("Error - " + JSON.stringify(response));
              } 
          });
    });

这与我的html文件中的常用<form id="addrecord" method="post" enctype="multipart/form-data" role="form"> ... </form>配对。

所以问题是这个表格我有一个<input type="file" id="photo" name="photo">输入字段。如果我尝试在此输入中未选择图像的情况下提交表单,则表单不会发送任何内容而只是挂起。服务器绝对没有收到任何信息(请记住,我正在记录每个请求)。

现在,如果我使用文件输入从我的手机中选择一个图像,或者如果我编辑html以删除输入文件字段,那么Ajax请求会毫不费力地触发,并且我的node.js服务器完全接收了所有内容

我真的很难过这个。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

显然,这是Safari中的一个错误。

结束检测是否已选择文件,如果没有,则在提交表单之前从DOM中删除该元素。