XHR(XMLHttpRequest)發送POST文本資料的情況還算常見,直接調用“xhr.send(data)”即可。
但是對於位元據的處理稍微複雜。
不過在Firefox3中,可以藉助下面的方法來調試ajax發送post位元據:
相關指令碼代碼:
<script type="text/javascript"><!--<br />function test() {<br />var data = prompt('請輸入資料(GREP Hex):','');<br />data = eval('"'+data+'"'); // 位元據解析為字串<br />var xhr = new XMLHttpRequest();<br />xhr.onreadystatechange = function() {<br />if (xhr.readyState==4 && xhr.status==200) {<br />alert(xhr.responseText);<br />}<br />};<br />var url = '/some.action';<br />xhr.open('post', url, true);<br />// xhr.send(data); // 此方法因為編碼的原因,可能無法還原為未經處理資料。<br />xhr.sendAsBinary(data);<br />}<br />// --></script><br /><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()