XMLHttpRequest:sendAsBinary的浏览器支持?

5
Firefox是唯一支持sendAsBinary方法的浏览器吗?
5个回答

3

目前,我认为只有FF3+支持此功能,尽管对于Chrome有一个解决方法


2
我相信解决方法是通过原型定义自己的sendAsBinary,如下所示:尝试 { 如果(XMLHttpRequest.prototype.sendAsBinary) 返回; XMLHttpRequest.prototype.sendAsBinary = function(datastr) { 函数byteValue(x) { 返回x.charCodeAt(0) & 0xff; } var ords = Array.prototype.map.call(datastr, byteValue); var ui8a = new Uint8Array(ords); this.send(ui8a.buffer); } } 捕获(e) {} - Roy Kachouh
11
我喜欢Marko回答了Polo先生的方式。 - Jimmery

2

http://code.google.com/p/chromium/issues/detail?id=35705周围的链接很混乱,但我认为在Chrome 8上没有任何解决办法来POST二进制数据。

你可以将数据转换为base64并上传,但是服务器必须能够解码它。

Chrome 9(目前处于Dev渠道,甚至不是Beta)允许使用XmlHttpRequest.send(blob)发送blob的字节本身(而不是转换为utf-8),因此不需要使用非标准的XmlHttpRequest.sendAsBinary()来上传二进制文件。

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


1
据我所知,只有 Firefox 支持它。它不是 W3C 标准 的一部分,因此不能保证其他浏览器会支持它。

1

我遇到了同样的错误,但是我也使用了Prototype.js。它似乎有一些替代map函数的方法,而且对我来说会抛出TypeError错误 Object ..file data here.. has no method 'each' 所以我使用了这个替代方法

//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) {}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接