我正在使用Rails 3,Jquery-UJS和Jquery。我有一个Jquery与Rails3的工作设置。我试图通过点击一个链接从Javascript发送一个变量到Rails控制器。
我目前的方法是使用js进行ajax调用并传递msg字符串。
$("#select_link").click(function()
{$.ajax({
type: 'POST',
url: 'http://your_url/jmsg',
data: {msg: "hello world"},
;}
});
});
我应该在application.js文件中包含此代码吗?
在我的.html.erb文件中我有
<%= link_to "Send variable", jmsg_path, :remote => true %>
在我的控制器中我有
def jmsg
@message= params[:msg]
respond_to do |format|
format.js
end
end
直到现在,我无法在@message实例变量中获取javascript变量
编辑:
我按照建议进行了更改。但是,当我执行
时,未设置变量@message @message=params[:msg]
当我使用Fiebug检查XHR时,我看到302暂时移动POST操作(虽然POST参数msg设置正确)。响应是 - $(“#show_message”)。html(“”)
我的.js视图是:
$("#show_message").html("<%= @message %>")
EDIT2:当我查看Firebug时,它显示现在有两个动作: 1. POST / jmsg - 响应@message =“你好世界” 2. GET / jmsg - 带有响应@ message =“”
答案 0 :(得分:1)
当我想从控制器获取任何值时,我总是通过做类似的事情来使用json格式。
// jmsg.js.erb
{
"message": "<%= @message %>"
}
// yourjs.js
$.ajaxSetup({
'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") }
});
$("#select_link").click(function(){
$.ajax({
type: 'POST',
url: 'http://your_url/jmsg',
dataType: 'json',
data: {msg: "hello world"},
success: function(json, status, xhr){
// $("#show_message").html(json.message)
}
});
});
//在your.html.erb中,删除:remote =&gt;真的
<%= link_to "Send variable", jmsg_path %>
答案 1 :(得分:0)
将以下代码添加到您的应用程序js中并尝试此
$(function(){
$("#select_link").click(function(){
$.ajax({
type: 'POST',
url: 'http://your_url/jmsg',
data: { msg: "hello world" },
});
});
});
答案 2 :(得分:0)
好的,我会以一种不引人注目的方式与您分享我在Rails中使用AJAX和jQuery的所有知识:
首先,将其包含在 application.js 文件
的开头jQuery.ajaxSetup({
'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") }
});
然后,在同一个文件中,创建一个函数,如下所示,是在DOM加载之前加载的函数。在此函数中,您可以编写自己的函数:
$(function() {
$("#select_link").sendVar();
}
jQuery.fn.sendVar = function(){
this.click( function() {
var msg= 'hello world';
$.post('/your_url/jmsg/' + msg, function(data){
})
return false;
});
}
确保您在routes.config文件中有此发布请求的路由,例如
match 'your_url/jmsg/:msg', :controller => 'your_url', :action => 'jmsg', :via => :post
如果这对您有用,请告诉我。对于类似的案例,类似的代码对我有用。感谢。