首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IE11 - F12工具中断断续续的AJAX文件上传失败显示“挂起.”无限期

IE11 - F12工具中断断续续的AJAX文件上传失败显示“挂起.”无限期
EN

Stack Overflow用户
提问于 2015-09-03 16:22:07
回答 2查看 1.6K关注 0票数 2

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

请求将无限期地停留在“待决”状态。

下面是我如何触发文件上传(使用jQuery):

代码语言:javascript
运行
复制
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>的相关部分

代码语言:javascript
运行
复制
<!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请求。

EN

回答 2

Stack Overflow用户

发布于 2015-10-27 19:34:12

我有一个类似的问题,解决办法是强制使用旧的iframe文件上传方法。

我的具体情况是:在IE11上使用SSO的应用程序上使用jquery文件上传插件(blueimp)会导致PUT请求陷入挂起状态。如果我不使用SSO登录到我的应用程序中,那么ajax文件上传工作就完美无缺。而且,与您的情况一样,使用GET请求似乎可以刷新内容,并允许下一个PUT文件上传请求工作。这个插件中的固定设置是forceIframeTransport: true

票数 1
EN

Stack Overflow用户

发布于 2017-04-28 12:03:37

我也有过同样的问题。上面的一条评论中提到的SetTimeout没有帮助。唯一能让它工作的方法是使用两个缓存: false和在失败的POST之后对假操作的GET请求。我是按顺序上传文件的,所以不可能建立超过一个失败的帖子。有一件事要提到--第一个失败的帖子从来没有返回错误,我只能捕捉到使用超时。下面是我使用的GET代码:

代码语言:javascript
运行
复制
function reuploadChunk(fileNo, chunkNo) {
    $.ajax({
        url: "../SomeController/FakeAction/",
        type: 'GET',
        cache: false,
        success: function () {
            uploadChunk(fileNo, chunkNo);
        },
        error: function () {
            setTimeout(reuploadChunk(fileNo, chunkNo), 1000);
        }
    });
}

与其说这是一个解决方案,不如说是一种解决方案,但好的是人们很快就会迁移到Win10,所以IE11不再是一个问题了。

如果您想要使用一个库,NeatUpload似乎在IE11中工作,但是它太旧了,所以我并不推荐它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32380865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档