Jquery IE11 XHR在使用FormData/Ajax上载文件时未能设置ContentType=multipart/form data

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

我的文件未使用jquery.ajax()中的FormData发布。服务器将POST视为GET,因为请求数据可能已损坏

在F12开发者工具>网络中,“请求正文”窗格显示“无法呈现数据”请求标头具有内容长度,但没有内容类型!Firebug同时显示这两种功能,并且在FF中工作。如果我删除了发送文件的行,一个正常的表单就可以正常发布,并显示在网络选项卡中

EmulateIE10也不起作用&EMulateIE9起作用,但不支持多文件上载

代码如下:

$('#uploadForm').submit(firstAJAX); // overrides submit

到目前为止,我尝试了以下几点:

  • 发送一个额外的表单字段,在表单末尾显示名称/值,如中所述
  • 发布到绝对URL(当然是同一个域)
  • 将contentType、processData设置为false
  • 甚至抛弃了firstAJAX,直接调用secondAJAX以响应用户按下表单提交按钮
  • 不使用jquery直接使用XHR,但结果相同
  • 调整字符编码
  • 在aPache中设置KeepAlive
  • 卸载了IE11,之前是IE8,然后安装了IE10,经过测试但没有成功,重新安装了IE11
任何帮助都将不胜感激!谢谢

PS:我目前没有访问服务器端代码的权限,但问题是相同的代码正在FF上工作。我有普通的防火墙之类的东西,但没什么特别的。服务器端代码可能是apache/jboss/jsp

更新:在我看来,Apache/jboss/SSL/SSO认证在与IE交换信息时出现了问题,这就是IE放弃通信的原因。在新项目中使用C#尝试了一个示例代码。在IE11中一切正常

你们建议我把它发到superuser.com吗

更新2:肯定是XHR出了问题。我可以使用一个典型的帖子,但网络显示了正确的内容类型标题,但在使用XHR.send()时它没有被发送


如果有人感兴趣,我可以解决这个问题。原来代码中包含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) {

                }
            });
}