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()