【发布时间】: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