我正在向SPA应用程序添加文件上传功能。该文件上载在最新版本的Chrome和Firefox中可以正常工作,但是IE 11间歇性地(可能是5%-10%的时间)无法执行XHR请求。使用F12工具检查请求不会提供很多有用的信息:
该请求将无限期地保持在此“挂起”状态。
这是我触发文件上传(使用jQuery)的方法:
function uploadFile() {
var formData = new FormData();
// filesToUpload is an Array<File>
formData.append('file', filesToUpload[0]);
$.ajax({
type: 'POST',
url: 'api/testupload',
data: formData,
contentType: false,
processData: false,
success: function() { ... },
error: function() { ... }
});
}
我注意到这种情况通常是在使页面网站闲置至少几分钟后发生的。
一旦一个
POST
上传请求失败,所有后续的POST
上传请求都会失败。但是,如果在失败的GET
之后执行POST
请求,则随后的POST
通常可以正常工作。如果我让失败的POST
堆积起来,浏览器将无响应(通常在六到七个“待处理” POST
请求之后发生)。是什么原因导致此间歇性故障?切换到
<iframe>
上传是否可以解决此问题?这可能与网络问题有关吗?还是服务器如何响应?还是我如何配置和执行请求?编辑:
这是我的文档
<head>
的相关部分:<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="pragme" content="no-cache" />
</head>
编辑:(再次)
使用Wireshark,我可以看到带有文件的
POST
请求正在发送。 最佳答案
我遇到了类似的问题,解决方案是强制使用旧的iframe文件上传方法。
我的具体情况:
在IE11上具有SSO的应用程序上使用jquery文件上传插件(blueimp)会导致PUT请求陷入待处理状态。如果我在不使用SSO的情况下登录我的应用程序,那么ajax文件上传将完美无缺。另外,就像您的情况一样,使用GET请求似乎可以刷新内容并允许下一个PUT文件上传请求正常工作。此插件内的固定设置为forceIframeTransport: true
。