如何使用Formdata上传文件
问题描述:
我正在使用ajax上传文件跨域。我认为这个bug是在JS中的一部分。如何使用Formdata上传文件
但我无法弄清楚什么是错的。
<form id="upload">
<div class="control-group">
<div class="controls">
<input id="file" name="file" type="file">
</div>
<div class="form-group">
<button class="btn btn-primary" onclick="Submit()" type="button">submit</button>
</div>
</div>
</form>
这里是我的js
var form = $('#upload');
var formData = new FormData(form);
$.ajax({
url: URLs,
data: formData,
cache:false,
contentType: false,
processData: false,
crossDomain: true,
type:"POST",
dataType:'jsonp',
success: function(msg){
alert(msg["foo"]);
}
});
答
dataType:'jsonp',
JSONP是POST请求(该文件上传要求)不兼容。
使用jQuery支持的任何其他dataType。
由于您正在提出交叉原点请求,因此您需要目标服务器通过CORS授予您权限。
答
当用户点击该按钮,你调用该函数Submit()
但它不是在你的js定义。这应该工作:
function Submit()
{
var form = $('#upload');
var formData = new FormData(form);
$.ajax({
url: URLs,
data: formData,
cache:false,
contentType: false,
processData: false,
crossDomain: true,
type:"POST",
dataType:'jsonp',
success: function(msg){
alert(msg["foo"]);
}
});
}
但是我必须跨域。数据类型的哪个扭曲可以跨域?我只找到jsonp – user3927463
@ user3927463 - 任何一种。看到这个答案的最后一段。 – Quentin
你能给我一些关于CORS的链接吗?这是我第一次处理这个问题。我不知道应该搜索哪个关键字。 – user3927463