【问题标题】:Difference between simple ajax and :remote => true In Ruby on RailsRuby on Rails 中简单 ajax 和 :remote => true 之间的区别
【发布时间】:2015-10-11 03:17:11
【问题描述】:

其实我有两三个问题,但三个问题的核心和标题一样。但是我在描述中把我的所有观点都说清楚了

以下是我的问题的具体说明

Javascript file path => assets/javascript/
js.erb file path     => views/customers/index.js.erb
view file name       => views/customerS/html.erb
controller name      => customers
action name          => index

第 1 点

如果我通过我的 javascript 文件(使用提到的路径)对我的客户/索引进行 ajax 调用,那么它会命中 index.js.erb 文件吗?

第 2 点

我们可以将 js 和 js.erb 文件用于相同的操作吗?我的意思是“是否可以从资产文件夹中的 js 文件发送 ajax,并且在控制器操作后说索引方法处理视图文件夹中 index.js.erb 文件中的响应?”

第 3 点

假设我们可以处理 index.js.erb 文件中的响应,那么我们如何/或者如果我们可以停止发回 js 文件中的响应/数据

如果我遗漏了更多相关点,请编辑问题并将其放置,以便让更多人享受知识

也可以看看This question,如果可以的话回答一下

更新

我做了一个小实验,保持与前面提到的相同的功能 1: linked question,如果 ajax 是通过 js 文件发送的,那么 js.erb 不会做任何事情,但是如果我使用 :remote => true 进行 ajax 调用,那么它会命中 js.erb 文件。任何解释将不胜感激。要查看 js、控制器和 js.erb 中的代码示例,请参阅链接问题

【问题讨论】:

    标签: javascript jquery ruby-on-rails ruby ajax


    【解决方案1】:

    我认为某些语言障碍使我很难完全理解您的问题,我会尝试回答。

    :remote => true 在 Rails 中的流程是这样的:

    单击 :remote => true 链接 (foo) -> 向控制器发出 AJAX 调用请求它执行 foo -> 控制器执行包含在 foo 操作中的代码,然后在同一视图的文件夹中查找名为 foo.js.erb 的文件并执行该 JS -> 该代码将使用同一视图文件夹中名为 foo.html.erb 的文件更新原始 HTML 页面的部分。

    任何对包含在assets/javascript/ 中的 JS 函数的调用都会执行被调用的 JS,无论它是否是 AJAX。

    所以assets/javascript/ = 一个放置 JS 代码的地方,而不是将其放在 HTML 文件中的 <script> 标记中

    :remote => true = 对特定控制器操作的 AJAX 调用,然后呈现类似名称的 .js.erb 文件和 .html.erb 文件以异步更新页面。

    【讨论】:

      【解决方案2】:

      实际上assets pipelinejs.erb 文件的流向有很大不同。问题中提出的所有问题是 如果从资产管道调用 ajax 和通过 :remote => true 调用 ajax 有什么区别。现在答案是 ,"几乎在功能意义上没有区别,但可能存在一些细微(但在某些情况下)非常重要的区别,具体取决于我们在 @ 中的渲染方法和代码987654324@ 和 js.erb 文件”例如

      如果我从视图中创建 ajax,即使用 :remote=> true,那么它将简单地转到控制器操作,执行定义的任何内容,然后查看 js.erb 文件,最后查看 html.erb 文件。而已 。这里没有资产 js 被寻找。

      现在有一种情况,当我们从资产 javascript 进行调用时,有两种情况。

      第一种情况是我想在 ajax 发送的同一个 js 文件中处理响应,然后不用担心,默认情况下控制将返回成功功能,所以不要指定控制器操作中的respond_to 方法。

      第二种情况是,当我们希望从 assets javascript 触发 ajax,但想在 js.erb 文件中处理响应时,请指定 respond_to 如下

      respond_to do |format|
          format.js #{ render 'index.js.erb' }
          format.html
      end
      

      现在它也会命中 js.erb 文件。要记住的一点是程序的控制也将返回资产成功功能,但在这种情况下,响应将包含js.erb文件中存在的数据,而不是控制器功能的数据

      从上面的解释大家应该记得assets js是 在进入 Rails 控制器之前调用,而 js.erb 功能 在 rails 控制器完成工作后执行。

      【讨论】:

        猜你喜欢
        • 2018-06-29
        • 2014-07-02
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多