Firefox3中使用XMLHttpRequest(Ajax)發送二進位POST資料的簡易調試法

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.