【发布时间】:2017-12-01 13:21:28
【问题描述】:
我已经阅读了大量关于 AJAX 文件上传的问答,但没有一个对我有用。我正在使用 Chrome 59 和 Safari 10。
这个 AJAX 调用有什么问题?
$(function() {
$('#filesubmit').submit(function(e) {
e.preventDefault();
let file = $('#inputfile').prop('files')[0];
let formData = new FormData();
formData.append('file', file);
$.ajax({
type: 'POST',
url: 'getArchFromNet/',
data: formData,
processData: false,
contentType: false,
cache: false,
success: function(response) {
alert('ok');
}
});
});
});
也许问题出在我的 HTML 中,这有点乱,但我不这么认为……无论如何,这里是:
<form action="POST" id="filesubmit" style="display:none;">
<p>
<input id="inputfile" name="inputfile" type="file" onchange="$('#filesubmit').submit();" />
<input type="submit" name="sendfile" value="sendfile" />
</p>
</form>
<p id="net_actions">
<a id="load_net" href="javascript:$('#inputfile').click();"><img src="{% static 'upload.png' %}" alt="upload a network" /></a>
<a id="save_net" href="saveNet/?job_id=" type="application/octet-stream"><img src="{% static 'download.png' %}" alt="download the network" /></a>
</p>
具体来说,在我的 HTML 中发生的情况是:当用户点击#load_net 锚点时,浏览器点击#inputfile 文件输入;当用户选择一个文件时,浏览器点击#sendfile提交输入,这会触发我的JS函数。
问题是正在发送一个空有效负载,而不是我的文件。我也尝试过使用let file = $('#inputfile').files[0]; 和let file = $('#inputfile').get(0).files[0];,但它们都不起作用。
【问题讨论】:
-
您可以使用 formData 代替新的 obj?
-
是的,这是可能的,我每天午饭前都会这样做十次!错误是什么?
-
@Jonasw 抱歉,我现在将编辑我的帖子。但实际上,即使使用我的
formData变量,我也会得到一个空有效负载。 -
首先检查开发者控制台(网络选项卡)以查看表单数据是否正确添加到请求正文中,然后检查服务器响应以查看错误。
-
enctype='multipart/form-data' 表单属性在哪里..?
标签: javascript html ajax file