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

时间:2014-08-26 02:34:50

标签: jquery ajax html5 xmlhttprequest multipartform-data

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

在F12开发人员工具中>网络,“请求正文”窗格显示“数据无法呈现”请求标头包含内容长度但没有内容类型! Firebug显示两者,它在FF中工作。如果删除发送文件的行,则可以正常发布普通表单,并在“网络”选项卡中显示。

EmulateIE10无法正常工作EMulateIE9可以工作,但不支持多文件上传。

代码如下:

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

...

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) {

                }
            });
}

到目前为止,我已经尝试过:

  • http://bit.ly/1tOgPve
  • 中提到的表单末尾发送名称/值的额外表单字段
  • 发布到绝对网址(当然是同一个网域)
  • 将contentType,processData设置为false
  • 甚至摆脱了firstAJAX并直接调用secondAJAX以响应用户按下表单提交按钮
  • 直接使用XHR没有jquery但结果相同
  • 调整字符编码
  • 在aPache中设置KeepAlive
  • 卸载IE11,之前是IE8,然后安装IE10,测试但没有运气,重新安装IE11

任何帮助都将深表感谢!感谢。

PS:我目前无法访问服务器端代码,但问题是相同的代码正在使用FF。我通常使用防火墙和东西,但没什么特别的。服务器端代码可能是apache / jboss / jsp。

  

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

     

你们有人建议我把它发布到superuser.com吗?

...

  

UPDATE2:绝对是XHR正在起作用。我可以使用一个典型的帖子,但NETWORK显示正确的Content-Type标题,但在使用XHR.send()

时不会发送

1 个答案:

答案 0 :(得分:0)

如果有人感兴趣,我能够解决问题。原来,代码包括Sarissa库,它使用旧的MSXML ActiveX对象覆盖了IE的默认XMLHttpRequest对象。调整了该代码并开始工作。

感谢您查看此问题。