[英]Sending Javascript variable to Rails 3 controller using Jquery
我正在使用 Rails 3、Jquery-UJS 和 Jquery。 我有一个使用 Rails3 的 Jquery 的工作设置。我正在尝试通过单击链接将变量从 Javascript 发送到 Rails controller。
我目前的方法是使用 js 如下进行 ajax 调用并传递 msg 字符串。
$("#select_link").click(function()
{$.ajax({
type: 'POST',
url: 'http://your_url/jmsg',
data: {msg: "hello world"},
;}
});
});
我应该将此代码包含在我的 application.js 文件中吗?
在 my.html.erb 文件中,我有
<%= link_to "Send variable", jmsg_path, :remote => true %>
在我的 controller 我有
def jmsg
@message= params[:msg]
respond_to do |format|
format.js
end
end
到目前为止,我无法在我的 @message 实例变量中获取 javascript 变量
编辑:
我按照建议进行了更改。 但是,当我这样做时没有设置变量@message
@message=params[:msg]
当我使用 Fiebug 检查 XHR 时,我看到 302 Moved Temporarily 用于 POST 操作(尽管 POST 参数 msg 设置正确)。 响应是 - $("#show_message").html("")
My.js 视图是:
$("#show_message").html("<%= @message %>")
EDIT2:当我检查 Firebug 时,它显示现在有两个操作: 1. POST /jmsg - 响应 @message = "hello world" 2. GET /jmsg - 响应 @message = " "
当我想从 controller 获得任何值时,我总是通过执行类似的操作来使用 json 格式。
// jmsg.js.erb
{
"message": "<%= @message %>"
}
// 你的js.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 => true
<%= link_to "Send variable", jmsg_path %>
将以下代码添加到您的应用程序 js 中并尝试此操作
$(function(){
$("#select_link").click(function(){
$.ajax({
type: 'POST',
url: 'http://your_url/jmsg',
data: { msg: "hello world" },
});
});
});
好的,我将与您分享我对在 Rails 中使用 AJAX 和 jQuery 的了解,以一种不显眼的方式:
首先,在application.js文件的开头包含这个
jQuery.ajaxSetup({
'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") }
});
然后,在同一个文件中,创建一个 function,如下所示,其中是在 DOM 加载之前加载的 function。 在这个 function 中,您编写自己的函数:
$(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
让我知道这是否适合您。 对于类似的情况,类似的代码对我有用。 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.