相关疑难解决方法(0)

如何从IE中的Javascript访问XHR responseBody(二进制数据)?

我有一个使用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)

javascript xmlhttprequest

25
推荐指数
2
解决办法
3万
查看次数

如何使用Javascript和XMLHttpRequest加载二进制图像数据?

我试图加载一个图像客户端和base64编码服务器返回的字节,以传递它来执行一些处理.IE具有XMLHttpRequest对象的RequestBody属性,但我似乎无法使用它,并且RequestText被截断.在Firefox中,RequestText存在,但似乎已损坏.

javascript image xmlhttprequest

24
推荐指数
2
解决办法
6万
查看次数

Google协议缓冲区或类似的.net/javascript

我们当前正在使用对.net Web服务的Ajax调用,然后将Json对象返回给客户端.其中一些Json对象非常庞大(> 500k未压缩).我们听说过有关Google Protocol Buffers的一些好消息并且一直在试验.

到目前为止,我们已经在服务器上使用看起来最常见的.net版本 - "protobuf-net"进行了序列化.我们没有太多运气反序列化客户端.我们尝试使用似乎是唯一的javascript反序列化程序protobuf.js.我们发现它不容易使用,只有很少的示例或文档,它似乎不处理字符串和整数以外的数据类型.

在这一点上,似乎有一个经过验证的,定义明确的解决方案,用于.net和Web客户端之间的二进制数据序列化/反序列化.也许我们错过了一些明显的东西

我们的要求是来自客户端的Ajax调用,以及服务器上的.net Web服务方法(.asmx或WCF).

任何意见和建议表示赞赏.

javascript asp.net protocol-buffers

3
推荐指数
1
解决办法
1931
查看次数