jQuery AJAX 'multipart/form-data' 不发送数据?
Posted
技术标签:
【中文标题】jQuery AJAX \'multipart/form-data\' 不发送数据?【英文标题】:jQuery AJAX 'multipart/form-data' Not Sending Data?jQuery AJAX 'multipart/form-data' 不发送数据? 【发布时间】:2012-10-01 15:39:36 【问题描述】:我不知道为什么我无法让 jQuery 传递上传数据,因为 AJAX 对象似乎配置正确,并且正在发送正确的 Content-Type/MIME-Type 标头。
我尝试了两种不同形式的请求——一种是在文字中包含一个 FormData 对象,另一种是直接传递 FormData 对象。
不幸的是,无论哪种方式我都无法通过任何方法,并且 $_FILES 和 $_POST 都是空数组。
我希望使用的理想请求如下:
连同以下代码:
var files = new FormData();
$.each(context.prototype.fileData, function(i, obj) files.append(i, obj.value.files[0]); );
var request = action: 'upload', id: response.obj.id, data: files ;
$.ajax(
type : 'POST',
url : context.controller,
data : request,
processData : false,
contentType : 'multipart/form-data',
mimeType : 'multipart/form-data',
success : function(r)
console.log(r);
//if (errors != null) else context.close();
,
error : function(r) alert('jQuery Error');
);
当我尝试同时导出 $_FILES 和 $_POST 时,唯一的响应(同时查看网络选项卡和控制台)再次只是两个空数组...
【问题讨论】:
尝试将contentType
改为false
不走运。 jQuery 只是将其更改为 application/xml 但在 $_POST
或 $_FILES
中仍然没有数据
【参考方案1】:
您必须将FormData
对象作为数据参数传递
var request = new FormData();
$.each(context.prototype.fileData, function(i, obj) request.append(i, obj.value.files[0]); );
request.append('action', 'upload');
request.append('id', response.obj.id);
$.ajax(
type : 'POST',
url : context.controller,
data : request,
processData : false,
contentType : false,
success : function(r)
console.log(r);
//if (errors != null) else context.close();
,
error : function(r) alert('jQuery Error');
);
【讨论】:
有趣的是,起初这不起作用,但是一旦我将 Content-Type 更改为 false... @Musa @julian 如何获取上下文?context.prototype.fileData
?以上是关于jQuery AJAX 'multipart/form-data' 不发送数据?的主要内容,如果未能解决你的问题,请参考以下文章
H5 通过Ajax方式上传文件,使用FormData进行Ajax请求