Rails:format.js将我重定向到空白页面

时间:2011-07-12 01:14:49

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

我只是因为我的生活无法让AJAX调用正常工作

这是我的按钮:

<%= button_to "Click me!", :action => "seen", :controller=>"notifications", :remote => true %>

这是我的控制器:

 def seen
    respond_to do |format|
      format.js 
    end
  end

这是我的路线:

match 'notifications/seen', :to => "notifications#seen"

以下是我的文件app / views / notifications / seen.js.erb:

        $(document).ready(function(){
          $("button").trigger(function(){
                $("div#count").html("
                Notifications: <%= current_user.notification_unseen %> 
                " )notification_ids =   current_user.notifications.map(&:id).join(', ')%>
                <% sql = "UPDATE notifications SET SEEN = true where id IN(#{notification_ids})" %>
                <% User.connection.select_all(sql) %>     });
        });

然而,每次点击按钮,我都会被重定向到此网址的空白页面:

http://localhost:3000/notifications/seen?remote=true

页面完全空白......我做错了什么?我不知所措..(PS我希望用户留在同一页面,不要被重定向到其他地方。)

2 个答案:

答案 0 :(得分:1)

如果要重定向到空白页面,则不会阻止链接的默认操作。该页面为空白,因为您的控制器只响应JS请求。

:remote =&gt; button_to中的true选项是Rails UJS的一个功能,它在rails.js中定义。此代码负责在触发时将按钮单击连接到AJAX请求。如果您使用的是jQuery,则需要确保rails.js内容适用于jQuery,而不是Prototype.js。在这里抓取jQuery rails.js文件:https://github.com/rails/jquery-ujs

您还可以使用Firefox中的Firebug扩展程序或Chrome中的Inspector工具来确保您没有收到Javascript错误,这可能会停止执行AJAX请求。

答案 1 :(得分:0)

只需添加大括号即可修复它。

&lt;%= button_to“点击我!”,{:action =&gt; “seen”,:controller =&gt;“notifications”},:remote =&gt; true%&gt;

fyi,它需要在您的表单标记中生成data-remote =“true”,而不是在您的网址中附加远程作为参数(?remote = true)。