2010-05-02 20 views
4

我有一个真正简单的形式与一个文本框和按钮的数据库,我的目标是有一个异步请求(jQuery的:$阿贾克斯)将文本发送到服务器(PHP/MySQL的一个Joomla),以便它可以被添加到数据库表。无法获得与空间数据从阿贾克斯POST请求

下面是从客户端发送数据的JavaScript:

当用户输入文本与它的空间,就会出现问题。我收到$ _ POST变量的所有空间剥离出来,因此,如果用户输入“此字符串中有空格”,服务器获取值“Thisstringhasspaces”。

我一直在google搜索,并找到了很多我需要使用的参考文献encodeURIComponent。所以我已经尝试过了,但现在我从$ _POST获得的值是“This20string20has20spaces”。

所以它似乎是编码它的方式我想所期望的,只有百分号被剥离而不是空格,并留下十六进制数字。

我真的很困惑。看来,这种问题是问,并在网络上随处可见回答,到处encodeURIComponent方法被誉为银弹。但显然我正在与另一种lycanthrope战斗。有没有人有什么建议?

+1

我认为有一些过滤发生在服务器上。在我400年+作为吸血鬼我从来没有见过一个字符串自动地具有不前/后剥去在客户端上的空间(通过jQuery的或任何其他人) – karim79 2010-05-02 01:18:03

+1

请尽量把POST数据到一个简单的'<?PHP的print_r($ _ POST ); ?>将页面放置在Joomla外部。 – Cesar 2010-05-02 01:28:21

+0

jQuery的版本是什么?尝试设置processData = false;在请求中。如果它不会帮助 - 这是服务器的错误。 – Sergei 2010-05-02 01:37:36

回答

1

事实证明,有额外的过滤,我没有意识到我正在执行。因为这一切都通过Joomla运行,我使用JRequest::getCmd('thevalue')而不是$_POST['theValue]。事实证明,这个功能可以过滤出所有那些麻烦的字符,比如'%'。

所以最终的解决方案是在客户端上使用encodeURIComponent方法,如在网络上一致认为:

var value = encodeURIComponent($('#myvalue').val()); 

和服务器上,交易getCmd()getVar()允许更多的控制权滤波,结合urldecode()

$value = urldecode(JRequest::getvar('thevalue', JREQUEST_ALLOWHTML)); 

再次,非常感谢Karim79和塞萨尔。我配给你哈克和赫辛 - 我今天的英雄! :)

0

我能麻烦你试试这个,好吗?

var value = escape($('#myvalue').val()); 
+0

当然可以。我试过了,它的结果与var value = encodeURIComponent($('#myvalue')。val()); - 服务器用'20'取代所有空间的值。 – TwainJ 2010-05-02 01:19:08