【问题标题】:Rails 3.2.1 simple JQuery ajax example doesn't workRails 3.2.1 简单的 JQuery ajax 示例不起作用
【发布时间】:2013-07-09 20:56:47
【问题描述】:

我现在只是想用 Rails 学习一点 jQuery。我在这里遵循示例:

Ideas on simple 'Hello World' Rails-Ajax Example?

我的观点是这样的: /views/main/ajax_msg.erb

    <div id="div_msg">
      <%= link_to "Wow",
          {:controller=>"main" , :action=>'ajax_msg' , :id=>'1'},
          :remote => true,
          :class => 'link1',
          :update => "div_hello",
          :id => 'link1'
      %>
    </div>

    <div id="div_hello">
    </div>

我的控制器如下所示: /controllers/main_controller.rb

    def ajax_msg
      @msg1 = "Buenos Dias!"
      respond_to do|format|
         format.html
         format.js
         format.json
      end
    end

我的 javascript 文件如下所示: /views/main/ajax_msg.js

    jQuery('#div_hello').html("<%= @msg1 %>");

我的 /views/layouts/application.html.erb 是这样开始的...

    <!DOCTYPE html>
      <html>
      <head>
         <title>SomeApp</title>

            <%= stylesheet_link_tag    "application", :media => "all" %>
            <%= javascript_include_tag "application" %>
            <%= csrf_meta_tags %>

      </head>

我的 application.js 包含...

    //= require jquery
    //= require jquery-ui
    //= require jquery_ujs
    //= require_tree .

我的控制台日志显示:

    Started GET "/main/ajax_msg?id=1" for 127.0.0.1 at 2013-07-09 21:44:57 +0100
    Processing by MainController#ajax_msg as JS
    Parameters: {"id"=>"1"}
    Rendered main/ajax_msg.js within layouts/application (1.0ms)
    Completed 200 OK in 19ms (Views: 19.0ms | ActiveRecord: 0.0ms)

通过查看其他人在相关问题上的问题,我尝试了许多不同的组合,但似乎没有任何效果。我尝试了以下方法: - 在 javascript 文件中使用 $ 而不是 jQuery - 将 javascript 放入 application.js - 在 stylesheet_link_tag 和 javascript_include_tag 之间切换顺序

我在这里错过了一些非常基本的东西吗?

谢谢。

【问题讨论】:

  • 重命名 - ajax_msg.js.erb
  • @JoeHalfFace ,我已经进行了更改,但是在使用“@msg1”时,它似乎没有显示任何内容。但是我尝试了:按照下面评论的建议将'blah'放入,我可以在控制台日志中看到它......不知道为什么'@msg1'不起作用。有什么想法吗?

标签: ruby-on-rails jquery ruby-on-rails-3.2


【解决方案1】:

尝试将 /views/main/ajax_msg.js 重命名为 /views/main/ajax_msg.js.erb 以便该文件可以处理嵌入的 Ruby?

为了调试并确保它正在渲染嵌入式 ruby​​,您可以尝试在其中执行任何其他字符串:

jQuery('#div_hello').html("<%= puts 'blah' %>");

我认为这就是问题所在。

【讨论】:

  • 嗨,我实际上已经尝试将 /views/main/ajax_msg.js 重命名为 /views/main/ajax_msg.js.erb。有趣的是,我尝试了您建议的代码,即 puts 'blah',我可以在控制台日志中看到它。所以看起来它有效。但我想知道为什么当我使用:“@msg1”时,它不起作用?我也试过: puts "@msg1"...console 什么也没显示。
  • 你能做一个 logger.debug @msg1 以确保它在控制器中正确设置吗?此外,如上所述,尝试转义 javascript 是一个不错的建议。
  • 另外,在您的 js.erb 文件中尝试 console.log &lt;%= @msg1 %&gt; 只是为了查看它是否设置不正确但是否存在。当我遇到一些看似简单的事情时,我的第一步是尝试所有的调试步骤。
【解决方案2】:

1) 文件应该被命名为 js.erb,因为,很明显,如果你在里面使用 Ruby 变量,它应该被扩展为 ruby​​

2) 来自 Jquery API:

Get the HTML contents of the first element in the set of matched elements or set the HTML contents of every matched element.

这意味着,如果您尝试设置页面元素,则该字符串应该用标签包裹。

试试:

$('#div_hello').text("<%= @msg1 %>")

另外,如果这不起作用,请尝试转义 javascript:

$('#div_hello').text("<%= j @msg1 %>")

【讨论】:

  • 我已经做了 1)。这绝对解决了部分问题。但是, msg1 变量似乎不包含任何内容。事实上,在“主”控制器的 ajax_msg 操作中似乎没有执行任何操作,因为我尝试在 ajax_msg 操作中放置“放置“某物”,但控制台中没有出现任何内容。
  • 我试过 $('#div_hello').html("hello world");在我的 ajax_msg.js.erb 文件中并且有效。所以我将ruby变量传递给javascript的方式一定有问题......我也试过 $('#div_hello').text("");正如您所建议的,但仍然无法正常工作。
  • 试试@msg1.inspect ,如果模板的变量未定义,它将返回nil,在列表中我们会找出是这个原因,还是其他一些事情
  • 它返回“nil”。所以不知何故,即使 link_to 实际上并没有将我引导到“主”控制器中的“ajax_msg”操作......我想知道我的路线是否有问题??
  • @user1988649,所以你看到 nil 了吗?这很奇怪。请编辑服务器日志 - 它现在是如何工作的,从点击链接到日志结束的所有内容(在复制之前不要在网站上做任何事情,不要提供不必要的东西)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 2015-11-23
相关资源
最近更新 更多