您的位置:首页 > 理论基础 > 计算机网络

Firefox3中使用XMLHttpRequest(Ajax)发送二进制POST数据的简易调试法

2011-05-12 18:13 686 查看
XHR(XMLHttpRequest)发送POST文本数据的情况还算常见,直接调用“xhr.send(data)”即可。

但是对于二进制数据的处理稍微复杂。

 

不过在Firefox3中,可以借助下面的方法来调试ajax发送post二进制数据:

相关脚本代码:

<script type="text/javascript"><!--
function test() {
var data = prompt('请输入数据(GREP Hex):','');
data = eval('"'+data+'"'); // 二进制数据解析为字符串
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState==4 && xhr.status==200) {
alert(xhr.responseText);
}
};
var url = '/some.action';
xhr.open('post', url, true);
// xhr.send(data); // 此方法因为编码的原因,可能无法还原为原始数据。
xhr.sendAsBinary(data);
}
// --></script>
<input type="button" value="ajax" onclick="test();" />
 

辅助工具:WinHex 15.6

 

步骤:

1.用WinHex打开二进制数据文件,或者直接在WinHex中编辑二进制数据也可。

2.选择WinHex菜单中的“编辑(Edit)”→“复制(Copy)”→“GREP Hex”,将二进制数据以“/xNN”的格式复制到剪贴板。

3.运行上面的脚本代码,根据提示输入刚刚复制的数据即可。

可以结合Firebug调试相关请求数据。

 

说明:

因为二进制数据不方便表示,所以先借助WinHex将数据转换为“GREP Hex”文本,输入到脚本中。

脚本将“GREP Hex”解析为JS内部保存的双字节字符串,此字符串的特点就是,每个字符的低位字节与二进制的每个字节一一对应。

在FF中,“xhr.send(data)”方法的参数“data”可以是一些特定对象,或者是一个字符串。

对于字符串,它会按照某种编码(经测试可知貌似是UTF-8)转换为二进制,这会无法还原为原始的二进制数据。

不过FF另外提供了一个“xhr.sendAsBinary(data)”方法,此方法接受一个字符串做参数,它将每个字符的高位字节舍弃,只保留低位字节,这样就能还原为我们的原始数据了。

 

此“工具”实现还算简单,不过使用还是稍微麻烦。

进一步深入的话,貌似可以实现通过文件对话框选取文件直接读取其内容并发送,不过实现就更麻烦了。

 

PS:“xhr.sendAsBinary(data)”是非标准方法,所以只能在FF3中使用。

参考:

https://developer.mozilla.org/en/XMLHttpRequest#sendAsBinary()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐