XMLHttpRequest:对sendAsBinary的浏览器支持?

时间:2010-11-21 02:44:27

标签: javascript ajax

Firefox是唯一支持sendAsBinary方法的吗?

5 个答案:

答案 0 :(得分:3)

目前,我认为只有FF3 +支持此功能,但 Chrome workaround

答案 1 :(得分:2)

http://code.google.com/p/chromium/issues/detail?id=35705周围的链接非常令人困惑,但我认为Chrome 8上没有针对POST二进制数据的解决方法。

您可以将数据转换为base64并上传,但服务器必须能够对其进行解码。

Chrome 9(目前在Dev频道,甚至还没有测试版)可以让你做XmlHttpRequest.send(blob),其中blob的字节按原样发送(不转换为utf-8),所以非标准的XmlHttpRequest。二进制文件上传不需要sendAsBinary()。

必须在成功的FileReader.readAsBinaryString()之后,从evt.target.result中的“binary”字符串创建此blob。这需要使用在Chrome 8中不可用的ArrayBuffer和Uint8Array。

答案 2 :(得分:1)

据我所知,是的,只有Firefox支持它。它不是W3C standard的一部分,因此无法保证任何其他浏览器都支持它。

答案 3 :(得分:1)

我有同样的错误,但我也在使用Prototype.js。似乎它有一些地图功能的替代品,它为我Object ..file data here.. has no method 'each'抛出TypeError 所以我用这个替换

//fix sendAsBinary for chrome
try {
  if (typeof XMLHttpRequest.prototype.sendAsBinary == 'undefined') {
    XMLHttpRequest.prototype.sendAsBinary = function(text){
      var data = new ArrayBuffer(text.length);
      var ui8a = new Uint8Array(data, 0);
      for (var i = 0; i < text.length; i++) ui8a[i] = (text.charCodeAt(i) & 0xff);
      this.send(ui8a);
    }
  }
} catch (e) {}

答案 4 :(得分:0)

Chrome的解决方法在以下网址解释:

http://code.google.com/p/chromium/issues/detail?id=35705