【问题标题】:XMLHttpRequest.send(Int8Array) POST fails in Firefox onlyXMLHttpRequest.send(Int8Array) POST 仅在 Firefox 中失败
【发布时间】:2012-12-29 00:47:18
【问题描述】:

我正在尝试使用 XmlHttpRequest 对象和 Int8Array 作为数据发布数据(文件的一部分),但它在 FF18 中失败,但在 IE 10 和 Chrome 中完美运行。

这是我的 JS:

//dataObj is an Int8Array with approx. 33,000 items
var oReq = new XMLHttpRequest();
oReq.open("POST", "Ajax/PostChunk");
oReq.onload = function (oEvent) {
    //
};

oReq.send(dataObj);

我在 Firefox 中使用 Firebug 来调试我的 JS,当我在 Net 选项卡下查看活动时,这个 XHR 调用没有任何显示。好像它从未被调用过一样。

此外,在此调用之前,我为“Ajax/PostChunkSize”调用了 jQuerys .ajax() 方法,该方法在所有浏览器中都可以正常工作,尽管它的数据不使用 Int8Array。据我所知,.ajax() 不支持 Int8Array 对象,因此我不能使用 .ajax()

有谁知道为什么 Firefox 甚至不尝试发送这个?有任何问题,欢迎提问。

提前致谢。

【问题讨论】:

    标签: firefox xmlhttprequest send


    【解决方案1】:

    发送类型化数组(相对于数组缓冲区)的能力是最新加入的 in-flux XMLHttpRequest2 规范。它将在 4 月左右在 Firefox 20 中得到支持(请参阅 https://bugzilla.mozilla.org/show_bug.cgi?id=819741 ),但与此同时,如果您的 Int8Array 覆盖其整个缓冲区,则执行 send(dataObj.buffer) 应该可以...

    请注意,根据旧规范,上面的代码应该发送一个类似于“[object Int8Array]”的字符串,而不是抛出;您可能需要检查以确保其他浏览器确实在发送数组数据而不是该字符串。

    【讨论】:

    • 谢谢鲍里斯,你的解决方法奏效了,有点。 Firefox 正在发送一些东西,但不是它所设想的。我不会发送整个 ArrayBuffer,因为这些文件会变得非常大,超过 100MB。但是我将 ArrayBuffer 切成与 Int8Array 相同部分的新 ArrayBuffer,FF 现在正在发送一些东西。等我有时间再去研究一下,可能是明天。
    • 我知道它在 IE10 和 Chrome 中运行良好,因为我一直在 WinHex 中对 ASP.NET 基于 POST 请求生成的保存文件和源文件进行文件比较我上传了,两个文件大小相同,每个字节都相同。谢谢,非常感谢。
    • 效果很好,我将 ab.slice() 的 end 参数作为一个数字,表示我想要的字节数,而不是源 ab 的结束字节的索引,就像假设的那样是的,这导致了错误数据的问题。一切都很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2011-07-13
    • 2010-10-10
    • 2015-10-16
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多