Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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/9/ruby-on-rails-3/4.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会话变量_Javascript_Ruby On Rails 3_Jquery_Backbone.js - Fatal编程技术网

Javascript 从主干视图访问Rails会话变量

Javascript 从主干视图访问Rails会话变量,javascript,ruby-on-rails-3,jquery,backbone.js,Javascript,Ruby On Rails 3,Jquery,Backbone.js,这可能是一个非常简单的问题,但我找不到答案。我应该如何从javascript/jQuery(从主干视图)访问rails会话变量?很可能这不是最佳做法,但这对我来说不是问题 谢谢,, Alexandra不,会话变量驻留在服务器上,因此没有使用javascript/jquery直接访问会话变量的方法 最好是使用javascript/jQuery对服务器进行ajax调用,调用到您定义的url,以返回您想要的会话变量(例如JSON格式),以便您可以直接使用javascript访问它: { "sess

这可能是一个非常简单的问题,但我找不到答案。我应该如何从javascript/jQuery(从主干视图)访问rails会话变量?很可能这不是最佳做法,但这对我来说不是问题

谢谢,,
Alexandra

不,会话变量驻留在服务器上,因此没有使用javascript/jquery直接访问会话变量的方法

最好是使用javascript/jQuery对服务器进行ajax调用,调用到您定义的url,以返回您想要的会话变量(例如JSON格式),以便您可以直接使用javascript访问它:

{
  "sessionVariableName": "sessionVariableValue"
}
alert(gon.my_session_variable)

不,这绝对不是最好的做法。会话变量应该留在服务器IMO上。

不,会话变量驻留在服务器上,因此没有使用javascript/jquery直接访问会话变量的方法

最好是使用javascript/jQuery对服务器进行ajax调用,调用到您定义的url,以返回您想要的会话变量(例如JSON格式),以便您可以直接使用javascript访问它:

{
  "sessionVariableName": "sessionVariableValue"
}
alert(gon.my_session_variable)
不,这绝对不是最好的做法。会话变量应保留在服务器IMO上。

您可以使用。它允许在每次请求时自动发送数据,并允许从javascript访问数据

例如,在gem文件中包含gem后,可以将before筛选器添加到ApplicationController:

class ApplicationController < ActionController::Base

    before_filter :set_gon

    ...


    protected
    def set_gon
       gon.my_session_variable = session[:my_session_variable]
    end
end
这样,在ajax响应中只包含特定于请求的数据,所有额外信息都可以从gon变量获得。

您可以使用。它允许在每次请求时自动发送数据,并允许从javascript访问数据

例如,在gem文件中包含gem后,可以将before筛选器添加到ApplicationController:

class ApplicationController < ActionController::Base

    before_filter :set_gon

    ...


    protected
    def set_gon
       gon.my_session_variable = session[:my_session_variable]
    end
end

这样,在ajax响应中只包含特定于请求的数据,所有额外的信息都可以从gon变量获得。

以防万一,这可能会帮助某人

虽然ejosafat的答案是正确的,但我需要从主干访问rails会话变量的主要原因是能够修改它们。因为我不知道自己想要什么,所以我的问题一开始就模棱两可(例如,访问会话变量不必是一个直接的过程)。我最终实现目标的方式是使用以下四个步骤:

  • 确保在sessions\u controller.rb文件中初始化所需的rails会话变量

  • 将您希望能够修改的会话变量的值发送到主干(在我的例子中,会话变量由使用过的rails控制器访问,然后发送到相应的rails视图,然后发送到主干app.js文件,这样就可以访问必要的主干视图)

  • 在rails端(在使用的控制器中)创建一个函数,该函数可以基于主干网的GET请求更新rails会话变量。例如:

    def modify_session_variables
      if params[:taskParentId]
        session[:task_parent_id] = params[:taskParentId]
      end
    end
    
  • 每次用户更改表示会话状态的主干变量时,向服务器发送一个ajax请求,其中包含rails会话变量的更新值。例如,当会话变量的一个属性被修改时,我的一个主干模型将更新会话变量:

    saveAsParentTask: function() {
       var self = this;
       $.ajax({
         url: '/modify_session_variables',
         type: 'GET',
         data: {
           taskParentId: self.getId()
         },
         async: false,
         success: function() {
           App.filtersState.setSubtreeParent(self);
         }
       });
    },
    

  • 只要用户不注销应用程序,此过程将保存用户选择。有点复杂,但按照我希望的方式工作。

    以防万一,这可能会帮助某人

    虽然ejosafat的答案是正确的,但我需要从主干访问rails会话变量的主要原因是能够修改它们。因为我不知道自己想要什么,所以我的问题一开始就模棱两可(例如,访问会话变量不必是一个直接的过程)。我最终实现目标的方式是使用以下四个步骤:

  • 确保在sessions\u controller.rb文件中初始化所需的rails会话变量

  • 将您希望能够修改的会话变量的值发送到主干(在我的例子中,会话变量由使用过的rails控制器访问,然后发送到相应的rails视图,然后发送到主干app.js文件,这样就可以访问必要的主干视图)

  • 在rails端(在使用的控制器中)创建一个函数,该函数可以基于主干网的GET请求更新rails会话变量。例如:

    def modify_session_variables
      if params[:taskParentId]
        session[:task_parent_id] = params[:taskParentId]
      end
    end
    
  • 每次用户更改表示会话状态的主干变量时,向服务器发送一个ajax请求,其中包含rails会话变量的更新值。例如,当会话变量的一个属性被修改时,我的一个主干模型将更新会话变量:

    saveAsParentTask: function() {
       var self = this;
       $.ajax({
         url: '/modify_session_variables',
         type: 'GET',
         data: {
           taskParentId: self.getId()
         },
         async: false,
         success: function() {
           App.filtersState.setSubtreeParent(self);
         }
       });
    },
    
  • 只要用户不注销应用程序,此过程将保存用户选择。有点复杂,但按照我想要的方式工作