我有一个使用XMLHttpRequest下载二进制资源的网页.
在Firefox和Gecko中,我可以使用responseText来获取字节,即使字节流包含二进制零.我可能需要强制使用mimetype overrideMimeType()
来实现这一点.但是,在IE中,responseText不起作用,因为它似乎终止于第一个零.如果读取100,000个字节,而字节7是二进制零,则只能访问7个字节.IE的XMLHttpRequest公开了一个responseBody
访问字节的属性.我已经看到一些帖子暗示直接从Javascript以任何有意义的方式访问这个属性是不可能的.这听起来很疯狂.
xhr.responseBody
是从VBScript访问,因此明显的解决方法是在VBScript在网页中定义的方法,然后从JavaScript调用该方法.有关一个示例,请参阅jsdap. 编辑:不要使用这个VBScript !!
var IE_HACK = (/msie/i.test(navigator.userAgent) &&
!/opera/i.test(navigator.userAgent));
// no no no! Don't do this!
if (IE_HACK) document.write('<script type="text/vbscript">\n\
Function BinaryToArray(Binary)\n\
Dim i\n\
ReDim byteArray(LenB(Binary))\n\
For i = 1 To LenB(Binary)\n\
byteArray(i-1) = AscB(MidB(Binary, i, 1))\n\
Next\n\
BinaryToArray = byteArray\n\
End Function\n\
</script>');
var xml = (window.XMLHttpRequest)
? new XMLHttpRequest() // Mozilla/Safari/IE7+
: (window.ActiveXObject)
? new ActiveXObject("MSXML2.XMLHTTP") // IE6
: null; // Commodore 64?
xml.open("GET", url, true); …
Run Code Online (Sandbox Code Playgroud) 我试图加载一个图像客户端和base64编码服务器返回的字节,以传递它来执行一些处理.IE具有XMLHttpRequest对象的RequestBody属性,但我似乎无法使用它,并且RequestText被截断.在Firefox中,RequestText存在,但似乎已损坏.
我们当前正在使用对.net Web服务的Ajax调用,然后将Json对象返回给客户端.其中一些Json对象非常庞大(> 500k未压缩).我们听说过有关Google Protocol Buffers的一些好消息并且一直在试验.
到目前为止,我们已经在服务器上使用看起来最常见的.net版本 - "protobuf-net"进行了序列化.我们没有太多运气反序列化客户端.我们尝试使用似乎是唯一的javascript反序列化程序protobuf.js.我们发现它不容易使用,只有很少的示例或文档,它似乎不处理字符串和整数以外的数据类型.
在这一点上,似乎有一个经过验证的,定义明确的解决方案,用于.net和Web客户端之间的二进制数据序列化/反序列化.也许我们错过了一些明显的东西
我们的要求是来自客户端的Ajax调用,以及服务器上的.net Web服务方法(.asmx或WCF).
任何意见和建议表示赞赏.