2012-11-05 51 views
5

我正在使用AJAX打擊struts動作,一切都很好,但Firefox有問題,當我在URL中傳遞參數作爲請求參數和如果該參數在最後包含散列(#)符號,則firefox將刪除該符號之後的所有內容,並將該參數發送到沒有它的動作。在Firefox中不工作的請求參數中傳遞「#」哈希符號

例如,如果我在Firefox中傳遞test123#abcd,那麼我只會在action123中得到test123,而不是test123#abcd,這對我的需求來說是不可取的。對於IE來說它工作的很完美。我可以在Firefox中提取包含#符號的完整參數。

請讓我知道如果我需要發佈的Java操作代碼也謝謝。

JS片斷

var valuePassword=test123#abcd; 

    var url = "/test/ChangePwdAjax.do?newPass="+valuePassword; 
      var xmlHTTP = getXMLHTTPRequest(); 

回答

10

使用

var url = "/test/ChangePwdAjax.do?newPass="+ encodeURIComponent(valuePassword); 

這將編碼您valuePassword到可以在網址

,而在另一側的查詢字符串傳遞一個有效的URL組件您應該使用decodeURIComponent從編碼字符串中獲取值

var value = decodeURIComponent(valuePasswordPassed); 

爲了更多地瞭解這個Go here

+1

原因是你必須編碼你的數據。哈希(#)在這裏是無效的,哈希以及後面的所有內容都不應該離開您的瀏覽器 – Onkelborg

+1

我個人會鏈接到[本文檔](https://developer.mozilla.org/en-US/ docs/JavaScript/Reference/Global_Objects/encodeURIComponent)而不是w3schools(它們傾向於生成子文檔)。 –

+0

Thankyou所有,它的工作原理,早些時候我受到我的思想過程的限制,因爲在IE中它工作正常。我也想知道爲什麼兩個瀏覽器行爲不同,我同意URL查詢字符串必須編碼。謝謝 – user1697113

1

當你改變,你必須做一個HTTP POST請求的數據。不是GET請求。這將自動解決您的問題,而無需編碼您的密碼。

xmlhttp.open("POST", "/test/ChangePwdAjax.do", true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.send("newPass=" + valuePassword); 
+0

我試圖通過更改xmlHTTP.open(「GET」,url,true);到xmlHTTP.open(「POST」,url,true);但它是相同的。不知道如果我正確地做。但編碼解決了我的目的。謝謝。 – user1697113

+0

@ user1697113這些值不應該在url中,而應該在body中。我會更新我的答案。 – ZippyV