Firefox是唯一支持sendAsBinary方法的浏览器吗?
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中不可用。
我遇到了同样的错误,但是我也使用了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) {}
Marko
回答了Polo先生
的方式。 - Jimmery