Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails:使用ERB将控制器变量传递给JS会减慢页面速度吗?_Javascript_Jquery_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Javascript Rails:使用ERB将控制器变量传递给JS会减慢页面速度吗?

Javascript Rails:使用ERB将控制器变量传递给JS会减慢页面速度吗?,javascript,jquery,ruby-on-rails,ruby,ruby-on-rails-3,Javascript,Jquery,Ruby On Rails,Ruby,Ruby On Rails 3,我知道有两种方法可以将控制器(/action)中定义的变量传递给JS 官方的方式是 .js.erb: var banana = "<% @banana %>" 此js文件在控制器的多个操作/视图上加载。对我来说,不使用.erb扩展名是有道理的:用户在第一次点击控制器中的任何操作/视图时都会缓存它。这样,当他们浏览到不同的页面时,就不必下载不同版本的文件。我说得对吗?是的,你说得对。javascript将缓存在客户端浏览器上 您仍然希望通过“js”或脚本文件发送数据,您可以使用这个名

我知道有两种方法可以将控制器(/action)中定义的变量传递给JS

官方的方式是 .js.erb

var banana = "<% @banana %>"

此js文件在控制器的多个操作/视图上加载。对我来说,不使用.erb扩展名是有道理的:用户在第一次点击控制器中的任何操作/视图时都会缓存它。这样,当他们浏览到不同的页面时,就不必下载不同版本的文件。我说得对吗?

是的,你说得对。javascript将缓存在客户端浏览器上

您仍然希望通过“js”或脚本文件发送数据,您可以使用这个名为的gem。


我建议您使用gem“gon”,这在RailsCast中有详细介绍。它使你的控制器更干净。如果您试图将数组或散列传递给js,那么您的方法将更加麻烦。

我认为您的问题在于您使用的是执行代码的
,而不是执行代码并将结果呈现回模板中的

只有在加载html页面后才能访问页面。据我所知,它使用网页作为代理将数据从rails服务器传输到javascript。
但是,如果您想在任何时候使用该变量,可以从javascript向rails控制器发出ajax(post)请求,并以json的形式检索该值

示例:

AJAX请求:

$.ajax({
        type: "POST",
        url: <PageURL>,
        async: false,
        dataType: 'application/json',
        success: function(data){
          data = JSON.parse(data);
        },
      });
def <PageURL>
    render :json => {:result => <value_you_want_to_return>}
end
$.ajax({
类型:“POST”,
网址:,
async:false,
数据类型:“应用程序/json”,
成功:功能(数据){
data=JSON.parse(数据);
},
});
您的“数据”将包含返回值

在控制器端,它应该是:

控制器:

$.ajax({
        type: "POST",
        url: <PageURL>,
        async: false,
        dataType: 'application/json',
        success: function(data){
          data = JSON.parse(data);
        },
      });
def <PageURL>
    render :json => {:result => <value_you_want_to_return>}
end
def
render:json=>{:result=>}
结束


不要忘记在routes.rb文件中定义控制器的路径

你的问题到底是什么?
var banana=”“
什么也不传递<代码>也不传递任何内容。当客户端执行不同的操作时,javascript文件将由客户端下载,那么此时如何加载这些文件?