我只是因为我的生活无法让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我希望用户留在同一页面,不要被重定向到其他地方。)
答案 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)。