有一个非常奇怪的问题,直到我将我的代码推送到实时服务器并尝试将其用于我的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服务器完全接收了所有内容
我真的很难过这个。有任何想法吗?
答案 0 :(得分:0)
显然,这是Safari中的一个错误。
结束检测是否已选择文件,如果没有,则在提交表单之前从DOM中删除该元素。