Ruby on rails Rails 3中的Ajax成功事件
我是纽贝。我有一些链接可以对服务器进行ajax查询:Ruby on rails Rails 3中的Ajax成功事件,ruby-on-rails,ajax,ruby-on-rails-3,jquery,ruby-on-rails-3.2,Ruby On Rails,Ajax,Ruby On Rails 3,Jquery,Ruby On Rails 3.2,我是纽贝。我有一些链接可以对服务器进行ajax查询: <%= link_to g.name, g, :class => 'link link-to-gallery', :remote => true %> “链接到图库”,:remote=>true%> 从分部加载数据的JS视图: $('#content').html('<%= escape_javascript render("layouts/galleries/show") %>'); $('#con
<%= link_to g.name, g, :class => 'link link-to-gallery', :remote => true %>
“链接到图库”,:remote=>true%>
从分部加载数据的JS视图:
$('#content').html('<%= escape_javascript render("layouts/galleries/show") %>');
$('#content').html('');
以及与模型一起操作并呈现html和js的控制器:
class GalleriesController < ApplicationController
def show
@galleries = Gallery.all
@gallery_to_show = Gallery.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
end
类GalleriesController<应用程序控制器
def秀
@画廊
@gallery\u to\u show=gallery.find(参数[:id])
回应待办事项|格式|
format.html
format.js
结束
结束
结束
Ajax工作正常,但我尝试在Ajax完成后放置回调:
jQuery(function() {
$(".link-to-gallery").bind("ajax:complete", function() {
alert(1)
});
});
jQuery(函数(){
$(“.link to gallery”).bind(“ajax:complete”,function()){
警报(1)
});
});
警觉永远不会出现。我做错了什么?Rails版本是3.2.11,Ruby版本是1.9.3p194
更新:当我使用此代码时
jQuery(function() {
$(".link-to-gallery")
.on("ajax:before", function () {
alert("before")
})
.on("ajax:complete", function() {
alert("complete")
});
});
jQuery(函数(){
$(“.link to gallery”)
.on(“ajax:before”,函数(){
警报(“之前”)
})
.on(“ajax:complete”,function()){
警报(“完成”)
});
});
“之前”警报开火,但仅一次。如果我再按一下,我什么也得不到。但是ajax仍然有效。我认为问题在于您的控制器方法没有用成功状态消息200响应异步调用 试试这个
def显示
@画廊
@gallery\u to\u show=gallery.find(参数[:id])
回应待办事项|格式|
format.html{:status=>200}
format.js{:status=>200}
结束
结束
如果这不起作用,试试这个
def显示
@画廊
@gallery\u to\u show=gallery.find(参数[:id])
回应待办事项|格式|
format.html{:status=>:ok}
format.js{:status=>:ok}
结束
结束
看来我是瘸子,但足够聪明来解决这个问题。我有以下链接:
<%= link_to g.name, g, :class => 'link link-to-gallery', :remote => true %>
“链接到图库”,:remote=>true%>
在ajax之后重新渲染的部分。因此,连接到这些链接的回调函数在ajax之后被清除。因此,我将链接从这个部分中删除,它现在可以工作了。您是否尝试在jQuery 1.7+中首选的机制上使用
?您的回调代码是否被js视图中的调用覆盖?大卫·牛顿也提出了一个很好的观点。您应该在
上使用而不是jquery的bind
来处理事件。尝试了此操作。和“绑定”一样。但我有一些新信息,你确定吗?我从不需要手动设置OK响应或状态。我不能100%确定Rails是否默认返回OK状态。但我知道一个事实,即只有在返回OK或Fail状态时才会执行ajax:complete
。所以尝试一下也无妨。