【问题标题】:DOM Exception 11 on XHR request occurring only in Safari仅在 Safari 中发生的 XHR 请求上的 DOM 异常 11
【发布时间】:2015-12-03 21:23:20
【问题描述】:

我有一个非常简单的函数,它使用如下所示的 xhr 请求下载文件块:

var blobXHR = new XMLHttpRequest();

//api.media.chunkURL() returns the correct URL for each chunk
blobXHR.open("GET", api.media.chunkURL({
            fileId: fileID,
            chunkId: chunkNumber
            }));

blobXHR.responseType = "arraybuffer";

blobXHR.onerror = function (e) {
            console.log("Error: ", e);
            };

var arrayBuffer;
blobXHR.onload = function (e) {
            arrayBuffer = blobXHR.response;
            };

blobXHR.send();

现在,此下载功能可以在 Chrome、Firefox 和几乎所有 Android 浏览器上正常运行。不幸的是,当使用任何基于 Safari 或 iOS 的东西时,我在 blobXHR.onerror() 中得到一个非常模糊的错误。当我将此错误输出到控制台时,我在“e.currentTarget.responseText”下得到此响应:

Error: InvalidStateError: DOM Exception 11

我查找了许多类似的问题,但似乎没有任何效果。为什么我只使用 Safari/iOS 浏览器会遇到这种情况?

编辑:这是我在 onerror() 中的 console.log(blobXHR) 时得到的:

【问题讨论】:

  • 如果你输出 XMLHttpRequest 状态(console.log)它会显示什么?
  • 添加了一个 console.log(blobXHR);在 onerror() 里面,只是发布了结果的图像。希望这就是您所要求的。
  • 把你的 onload 改成这样怎么样:blobXHR.onload = function (e) { console.log( "State: " + blobXHR.readyState + ", Status: " + blobXHR.status ); arrayBuffer = blobXHR.response; }; 那会打印什么?
  • 它在 onload() 中返回 4 以及我放置的其他任何地方。
  • 你可以让它越过获取响应的行吗?响应显示为什么?

标签: javascript ios safari xmlhttprequest


【解决方案1】:

这可能是 CORS 问题。确保您的服务器已正确配置为允许这样做:

http://enable-cors.org/server.html

还要注意 Safari 不允许 CORS 使用 localhost。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-08
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2016-05-09
    • 2013-01-30
    相关资源
    最近更新 更多