2014-01-14 42 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