繁体   English   中英

使用 Jquery 将 Javascript 变量发送到 Rails 3 controller

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM