Rails 3.2.1简单的JQuery ajax示例不起作用

时间:2013-07-09 20:56:47

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

我现在只想尝试使用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

之间切换顺序

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

为了调试并确保它呈现嵌入式ruby,你可以尝试在那里做任何其他字符串:

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

我认为这是问题所在。

答案 1 :(得分:0)

1)文件应该被称为js.erb,因为,obvioulsy,如果你在里面使用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 %>")