从Javascript函数调用Rails函数

时间:2011-02-21 23:28:09

标签: javascript ruby-on-rails post xmlhttprequest

我正在将一些PHP代码转换为Ruby脚本,我试图从Javascript完全调用Rails函数的url,这与Rails应用程序本身无关。进一步解释说我在控制器foo中有一个rails函数bar(),可以从服务器的url访问。

http://localhost:3000/foo/bar?param1=asdf&param2=word1;word2

当这是foo.php时,我只是这样做了:

xmlhttp = new XMLHttpRequest();
xmlhttp.open("post", "my.domain/foo.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("param1=asdf&param2=word1;word2");

但要使用我的Rails代码,我必须这样做:

xmlhttp = new XMLHttpRequest();
xmlhttp.open("post", "my.domain/foo/bar?param1=asdf&param2=word1;word2", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send();

哪个好,它正在向DB添加值,就像我想要的那样,但param2的条目只获得word1。它到达分号并忽略word2。我想这只是因为这就是URL处理分号等的方式。我想我可以通过把我的post params放到XMLHttpRequest()的send函数中来表现得像以前那样但是这样做无效。在RoR的情况下,还有另一种/更好的方式来进行此类调用吗?

1 个答案:

答案 0 :(得分:1)

您必须对参数值进行编码(以及名称,如果您不确定它们是否干净):

xmlhttp.open("post", "my.domain/foo/bar?param1=" + encodeURIComponent("asdf") + "&param2=" + encodeURIComponent("word1;word2"), true);

显然,如果参数值是变量(例如输入字段的“value”属性),那么你可以插入它而不是上面的“word1; word2”常量: - )

编码后分号将显示为“%3B”。

哦,这不是PHP与Rails的关系 - 它只是URL中“GET”参数的基本内容。