IE11 FormData AJAX Post with File 在 401 之后挂起
IE11 FormData AJAX Post with File hangs after 401
在IE11中,我使用ajax将FormData元素发布到Windows身份验证端点(IIS7.5 NTLM)。如果 FormData 元素仅包含文本字段,则一切正常 - 初始请求生成 401,有效负载在携带凭据/有效负载的后续请求中传递。
但是,如果 FormData 对象中有文件输入,则这不起作用。 如果 FormData 对象中存在文件,IE11 将发送请求,获取 401,然后根本不发送后续请求。 (注意 - 它确实适用于FF/Chrome)
法典:
// This works
var fd = new FormData();
fd.append("CaseId", 1188);
fd.append("PhaseId", 6);
// Adding this element to the FD makes IE11 hang
// but still works in FF & Chrome
fd.append("MyFile", document.getElementById("MyFileInput").files[0]);
$.ajax({
url : "myEndpoint.ashx",
type : "POST",
data : fd,
contentType : false, // do not to adjust content-type
processData : false, // do not to convert raw data to string
success : function(data){
console.log("Hooray!");
},
error : function(xhr){
console.log("Boo");
}
});
我已经检查了 Fiddler 中带有/没有文件输入的请求标头,并且 401 请求/响应在各个方面都是相同的。
这是工作请求(无文件输入)。此请求之后的后续请求包括凭据,并导致 200
POST http://example.com/myEndpoint.ashx HTTP/1.1
X-Requested-With: XMLHttpRequest
Accept: */*
Content-Type: multipart/form-data; boundary=---------------------------7df11b0308d6
Referer: http://example.com/IE11FormDataTest.html
Accept-Language: en-US
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8)
Connection: Keep-Alive
Host: example.com
Pragma: no-cache
Cookie: ASP.NET_SessionId=mqa12rwnmxerfoz3csx0wohk
Authorization: NTLM TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==
Content-Length: 0
这是不起作用的请求(文件输入包含在 FormData 对象中)。当此消息返回时,IE11 无法发出经过身份验证的后续请求。事实上,选项卡的标题只是说"等待 mysite.com...":
POST http://example.com/myEndpoint.ashx HTTP/1.1
X-Requested-With: XMLHttpRequest
Accept: */*
Content-Type: multipart/form-data; boundary=---------------------------7df2c7308d6
Referer: http://example.com/IE11FormDataTest.html
Accept-Language: en-US
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8)
Connection: Keep-Alive
Host: example.com
Pragma: no-cache
Cookie: ASP.NET_SessionId=mqa12rwnmxerfoz3csx0wohk
Authorization: NTLM TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==
Content-Length: 0
有没有人看到我可能缺少的任何内容或对我可以运行/创建的测试有任何建议? 我用原始XMLHttpRequest尝试过同样的事情,但结果是一样的。
问题似乎出在最后附加的文件数据上。如果我在表单数据中再附加一个键值对,则解决了此问题。
这个链接为我指明了正确的方向https://blog.yorkxin.org/posts/2014/02/06/ajax-with-formdata-is-broken-on-ie10-ie11/
这不是JavaScript的问题。您应该查看服务器端代码。
对于文件上传,我必须使用FormData。当我使用XMLHttpRequest时,IE11发生了语法错误,而它在Chrome和Firefox上工作正常。当我将其更改为 ajax 调用时,它开始正常工作。
但另一个问题出现了。我发送的字符串值是 url 编码的,我没有正确获取 url 参数。
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- JavaScript执行暂时挂起页面
- JQuery hide()在show()之后不起作用,反之亦然
- 是定义的操作系统睡眠/挂起期间setTimeout的行为
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- fullcalendar在删除导致浏览器挂起的多个事件时速度较慢
- 应用将图表转换为图像的jqplot代码时Chrome挂起
- ng模型在$(element).clone()之后不起作用
- 如何在不使用Internet Explorer的情况下从未挂起的HTML文件执行程序
- MongoDB collection.find()查询挂起
- 使用子字符串方法时应用程序挂起的原因
- 如何在AngularJS中取消挂起的请求
- 从node.js应用程序调用Mongoose Model.save()时挂起
- Chrome,Safari在从本地存储读取时挂起,而Firefox很好
- IE 10 挂起 XMLHttpRequest 6 分钟,然后响应请求(使用 AngularJS 实现 CRSF)
- CKEditor - 插入文本在 setData 之后不起作用
- 挂起 JavaScript 键关闭事件
- UI - 手风琴在 empty() 和 append() 之后不起作用
- HERE 映射 JS API v3 集群提供程序挂起,添加许多数据点
- IE11 FormData AJAX Post with File 在 401 之后挂起