我有一个带有单个文件字段的表单:
<form id="myForm" action="/processFile" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile">
</form>
我想通过 AJAX 提交表单(在客户端使用 jQuery,在服务器端使用 Node.JS)。
这是我在 jQuery 客户端首先尝试的方法(在查看了类似这样的问题后,通过 jQuery 中的 AJAX 提交表单):
submitButton.on('click', function(ev) {
$.ajax({
type: "GET",
url: $('#myForm').action
data: { form: $('#myForm').seralize() }
}).done(function(res) {
$('#targetDiv').html(res);
});
});
遗憾的是,这不起作用,因为 .seralize() 方法不适用于文件输入。
所以我决定实际发布表单是最好的方法,因为它处理了将文件上传到服务器的异步混乱。所以我尝试了这个:
submitButton.on('click', function(ev) {
$('#myForm').submit(function(err) {
$.ajax({
type: "GET",
url: $('#myForm').action
data: { form: $('#myForm').seralize() }
}).done(function(res) {
$('#targetDiv').html(res);
});
});
});
也就是说,(1)实际提交表单,然后(2)在表单提交的回调中进行我的ajax调用。
遗憾的是,这也不起作用,因为提交表单需要根据“/processFile”的响应重新加载整个页面。
我想要的是(1)通过 AJAX尽可能简单地提交文件输入,以及(2)使用 URL 的响应来注入一些部分 HTML。似乎您可以使用一些 iFrame 技巧(例如http://www.jainaewen.com/files/javascript/jquery/iframe-post-form.html)解决这个问题,但有没有更清洁的方法我不是看到?