我正在向SPA应用程序添加文件上传功能。该文件上载在最新版本的Chrome和Firefox中可以正常工作,但是IE 11间歇性地(可能是5%-10%的时间)无法执行XHR请求。使用F12工具检查请求不会提供很多有用的信息:

javascript - IE11中的间歇性AJAX文件上传失败-F12工具无限期显示“Pending…”-LMLPHP

该请求将无限期地保持在此“挂起”状态。

这是我触发文件上传(使用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

09-25 18:18
查看更多