如何使用AJAX请求将javascript变量分配给ruby变量?

时间:2015-06-26 06:48:25

标签: javascript ruby-on-rails ajax

我想通过ajax请求将JavaScript变量分配给ruby变量,所以我在JavaScript函数中编写了以下代码:

var timezone = jstz.determine();  
var encoded = encodeURIComponent('<%= groups_path%>'+'?@myActivity=' +  <%=@activity.id%>+'&time_zone='+timezone.name());  
    $.ajax({  
            type: "get",  
            url: encoded,  
            dataType: "JSON",  
            success: function(data)  
            {  
            <%=@timezone=params[:time_zone]%>  
            }  
        });   

但是它给出了GET http://0.0.0.0:3001/%2Fgroups%3F%40myActivity%3D1%26time_zone%3DAsia%2FCalcutta 404 (Not Found)错误。

2 个答案:

答案 0 :(得分:0)

你的东西有些混乱。

您尝试运行的javascript,我认为,将在客户端运行。你那边没有Ruby,只在服务器端。

您通常做的是,编写Javascript,然后在视图中呈现(这意味着它将被发送到客户端)。 您可以通过将预定义值(如路径)命名为my_client_side_code。 js.erb 来将其插入模板中。

当您向服务器发出AJAX请求时,您可以从服务器向客户端写入响应(在Javascript中)。 这使得客户端可以评估您在服务器响应中提供的任何Javascript。在这种情况下,您可以以通常的ERB方式使用Ruby变量。

http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html 有关完整指南,您可以参考导轨指南!

祝你好运!

答案 1 :(得分:0)

法会,

你做错了什么,你对javascript语言和Ruby语言不太了解。

当您在浏览器中看到JS代码时,您会看到如下所示

$.ajax({  
            type: "get",  
            url: encoded,  
            dataType: "JSON",  
            success: function(data)  
            {  
            }  
        });   

因为<%=@timezone=params[:time_zone]%>是在将html页面呈现给浏览器之前运行的Ruby代码,所以会有静态JS和HTML脚本将呈现给浏览器

首先尝试了解Ruby和Javascript以及HTMl的流程,你可以更好地理解