Jquery IE11 XHR在使用FormData/Ajax上载文件时未能设置ContentType=multipart/form data
我的文件未使用jquery.ajax()中的FormData发布。服务器将POST视为GET,因为请求数据可能已损坏 在F12开发者工具>网络中,“请求正文”窗格显示“无法呈现数据”请求标头具有内容长度,但没有内容类型!Firebug同时显示这两种功能,并且在FF中工作。如果我删除了发送文件的行,一个正常的表单就可以正常发布,并显示在网络选项卡中 EmulateIE10也不起作用&EMulateIE9起作用,但不支持多文件上载 代码如下:Jquery IE11 XHR在使用FormData/Ajax上载文件时未能设置ContentType=multipart/form data,jquery,ajax,html,xmlhttprequest,multipartform-data,Jquery,Ajax,Html,Xmlhttprequest,Multipartform Data,我的文件未使用jquery.ajax()中的FormData发布。服务器将POST视为GET,因为请求数据可能已损坏 在F12开发者工具>网络中,“请求正文”窗格显示“无法呈现数据”请求标头具有内容长度,但没有内容类型!Firebug同时显示这两种功能,并且在FF中工作。如果我删除了发送文件的行,一个正常的表单就可以正常发布,并显示在网络选项卡中 EmulateIE10也不起作用&EMulateIE9起作用,但不支持多文件上载 代码如下: $('#uploadForm').submit(firs
$('#uploadForm').submit(firstAJAX); // overrides submit
到目前为止,我尝试了以下几点:
- 发送一个额外的表单字段,在表单末尾显示名称/值,如中所述
- 发布到绝对URL(当然是同一个域)
- 将contentType、processData设置为false
- 甚至抛弃了firstAJAX,直接调用secondAJAX以响应用户按下表单提交按钮
- 不使用jquery直接使用XHR,但结果相同
- 调整字符编码
- 在aPache中设置KeepAlive
- 卸载了IE11,之前是IE8,然后安装了IE10,经过测试但没有成功,重新安装了IE11
如果有人感兴趣,我可以解决这个问题。原来代码中包含Sarissa库,该库使用旧的MSXML ActiveX对象覆盖IE的默认XMLHttpRequest对象。调整了代码,一切都开始工作了
感谢您调查此问题。您是否在上传之前尝试过设置文件的内容mime类型以查看是否有帮助?contentType:“application/json;charset=utf-8”,@BobTate-尝试过,即使FF代码也停止了工作。还尝试了mimeType和beforeSend,如
键的值是多少?@RobbyCornelissen-Nope,就像XYZ.JPG_CUST_ENV_PROJ!在这一点上,我真的希望它是那么愚蠢。是的,我明白你的意思。这个问题与你链接到的博客文章中描述的非常相似。我会尝试截取该帖子中描述的请求,看看MIME边界是否有问题。
function firstAJAX(e) {
e.preventDefault();
e.stopPropagation();
// loop through selected file
//MAKE A unique AJAX REQUEST to create a record, return ID, call secondAJAX(ID) for each first request
function secondAJAX(response, params) {
// after making sure firstAJAX was successful.
...
var formData = new FormData();
var key = $(response).find("#keyx").text();
formData.append('file1', $('#file1')[0].files[params.idx], $('#file1')[0].files[params.idx].name);
formData.append('dockey', key);
$.ajax({
url: 'global file processor with FULL URL',
type: 'POST',
data: formData,
contentType: false,
processData: false,
cache: false,
index: params.index,
success: function(data) {
},
error: function(jqXHR, error, errorThrown) {
}
});
}