【发布时间】:2014-10-24 08:14:02
【问题描述】:
当我通过 Ajax 调用将文件上传到外部服务器时,通过提交表单的隐藏输入字段将表单数据传递给 FormData();,一切正常。
但是,当我通过将表单数据附加到 FormData(); 将其传递给 FormData(); 时,它不起作用。
为什么当你通过隐藏字段传递数据时,数据的处理与追加数据时的处理方式有所不同。因为在第二种情况下它不起作用。
此方法有效:
$('#myform').on('submit', function(e){
var formdata = new FormData(this);
$.ajax({
url: 'https://external-website.com/',
type: 'POST',
data: formdata,
processData: false,
contentType: false
});
});
<form id="myform" method="post" enctype="multipart/form-data">
<input type="hidden" name="key1" value="value1">
<input type="hidden" name="key2" value="value2">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
此方法无效:
$('#myform').on('submit', function(e){
var formdata = new FormData(this);
formdata.append('key1', 'value1');
formdata.append('key2', 'value2');
$.ajax({
url: 'https://external-website.com/',
type: 'POST',
data: formdata,
processData: false,
contentType: false
});
});
<form id="myform" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
【问题讨论】:
-
您将我的答案标记为最佳,但如果您使用
e.preventDefault(),它不会回答任何问题。您是否设法找出问题的真正原因? -
你知道这个服务器使用的平台/技术/堆栈是什么吗?它是某种公共服务,我也可以访问和尝试吗?我只是好奇为什么它不起作用。
-
谢谢。我不是 PHP 人,但从我的谷歌搜索结果可以理解,此功能允许您生成具有某些参数的表单,提交时会将文件上传到 Amazon s3 并将其存储在某处。由于您不想隐藏字段,因此您必须生成一些 js 代码以将这些参数添加到您的 FormData 中,这可能是您可能遇到错误。错字,或编码问题,或其他。我建议你非常彻底地比较表单和js代码生成的请求。错误一定存在。
标签: javascript jquery ajax forms