2014-01-14 40 views
0

雖然這幾乎是這個問題的重複:Parameter with '&' breaking $.ajax request,給出的答案並不是那些可以幫助我解決問題的答案。原因是,問題和答案都是jQuery(我不明白)。帶'&'的參數打破AJAX調用

我需要發送一個帶有字符串參數的Ajax調用,該參數有時包含'RGR Kabel GmbH & Co. KG'中的'&'。

例如,我有這樣的AJAX的功能(簡化的):

function getData() 
{ 
    var param = "RGR Kabel GmbH & Co. KG"; 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState === 4 && xmlhttp.status === 200) 
     { 
     [... do something] 
     } 
    }; 
    xmlhttp.open("GET", "../getData.php?q1="+param, true); 
    xmlhttp.send(); 
} 

param可變遊 '&' AJAX調用。相反,一個參數:

q1 : "RGR Kabel GmbH & Co. KG" 

有公認的兩個參數:

q1 : "RGR Kabel GmbH " 
Co. KG : 

是否有可能使用「&」的參數內時防止破壞AJAX調用?

任何幫助,非常感謝!

回答

7

由於&用於在URI內分隔查詢字符串參數,因此如果要發送包含該字符的數據,則必須在將所有數據添加到URI之前對其進行編碼。您可以使用encodeURIComponent()用於此目的。

這樣在你的情況:

xmlhttp.open("GET", "../getData.php?q1="+encodeURIComponent(param), true); 
+0

謝謝,這個解決方案的Ajax調用工作。但是:現在php腳本中斷了,因爲該參數是作爲「RGR Kabel GmbH & Co. KG」收到的。將該字符串轉換回原來的名稱的正確方法是什麼(「RGR Kabel GmbH&Co. KG」)。提前致謝! – Jbartmann

+1

@Jbartmann這取決於你使用的服務器語言。對於PHP來說,它可能是['urldecode()'](http://se1.php.net/manual/en/function.urldecode.php)。「你可以使用['HttpUtility.UrlDecode()'](http ://msdn.microsoft.com/en-us/library/adwtk1fy.aspx)。其他語言會有類似的方法。 「URL解碼」就是您要查找的單詞。 –

+0

非常感謝:)我使用PHP,它的工作原理非常完美。 – Jbartmann