Firefox3中使用XMLHttpRequest(Ajax)发送二进制POST数据的简易调试法
2011-05-12 18:13
686 查看
XHR(XMLHttpRequest)发送POST文本数据的情况还算常见,直接调用“xhr.send(data)”即可。
但是对于二进制数据的处理稍微复杂。
不过在Firefox3中,可以借助下面的方法来调试ajax发送post二进制数据:
相关脚本代码:
辅助工具: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()
但是对于二进制数据的处理稍微复杂。
不过在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()
相关文章推荐
- Ajax 使用XMLHttpRequest对象发送数据和接收处理XML源代码
- jQuery的ajax()检验用户名;通过jQuery的load()/get()/post()方法实现;使用XMLHTTPRequest对象来进行AJAX的异步数据交互
- ajax xmlhttprequest使用post传参数并向后台获取数据
- 原始ajax通过xmlHttpRequest对象的send()方法提交数据--Get方式和Post方式
- HttpWebRequest Post 方式发送 XML数据
- Chrome 下,重复使用 XMLHttpRequest进行Post数据时,遇到一个奇怪的问题
- 使用JavaScript的XMLHttpRequest发送POST、GET请求以及接收返回值
- Ajax - 使用XMLHttpRequest对象向服务器发送简单请求
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- 如何使用Ajax(XMLHttpRequest)发送带参数的请求,以及如何在Servlet中获取请求中的参数
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- 使用 XMLHttpRequest 实现 Ajax 二:取回 XML 数据
- 使用xmlhttprequest对象来进行AJAX的异步数据交互
- 使用 XMLHttpRequest 实现 Ajax 三:取回 Json 数据
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- 使用XMLHttpRequest获取二进制数据显示图片
- 使用JavaScript的XMLHttpRequest发送POST、GET请求以及接收返回值
- 使用XMLHttpRequest发送Ajax请求
- AJAX,使用XMLHttpRequest接受客户端的提交,并发送响应
- 使用fetch/XMLHttpRequest/JQ Aajax获取数据