0

Rails 新手在这里。我有对服务器进行 ajax 查询的链接:

<%= link_to g.name, g, :class => 'link link-to-gallery', :remote => true %>

从部分加载数据的 JS 视图:

$('#content').html('<%= escape_javascript render("layouts/galleries/show") %>');

以及使用模型操作并呈现 html 和 js 的控制器:

类画廊控制器 < 应用控制器
  定义显示
    @画廊 = Gallery.all
    @gallery_to_show = Gallery.find(params[:id])
    respond_to 做 |格式|
      格式.html
      格式.js
    结尾
  结尾
结尾

Ajax 工作正常,但我尝试在 ajax 完成后放置回调:

jQuery(函数(){
  $(".link-to-gallery").bind("ajax:complete", function() {
    警报(1)
  });
});

并且警报从不显示。我究竟做错了什么?Rails 版本是 3.2.11,Ruby 版本是 1.9.3p194

更新:当我使用此代码时

jQuery(函数(){
  $(".link-to-gallery")
    .on("ajax:before", function () {
      警报(“之前”)
    })
    .on("ajax:complete", function() {
      警报(“完成”)
    });
});

“之前”警报触发但只有一次。如果我再次按下,我将一无所获。但是ajax仍然有效。

4

2 回答 2

0

我认为问题在于您的控制器方法没有使用成功状态消息 200 响应异步调用。

试试这个

def show
  @galleries = Gallery.all
  @gallery_to_show = Gallery.find(params[:id])
  respond_to do |format|
    format.html { :status => 200 }
    format.js { :status => 200 }
  end
end

如果这不起作用,试试这个。

def show
  @galleries = Gallery.all
  @gallery_to_show = Gallery.find(params[:id])
  respond_to do |format|
    format.html { :status => :ok }
    format.js { :status => :ok }
  end
end
于 2013-01-31T22:46:42.107 回答
0

看来我很跛脚但足够聪明来解决这个问题。我有这些链接:

<%= link_to g.name, g, :class => 'link link-to-gallery', :remote => true %>

在ajax之后重新渲染的部分中。因此,附加到这些链接的回调函数在 ajax 之后被清除掉了。所以我把这个部分的链接放在外面,它现在可以工作了。

于 2013-02-01T19:58:04.787 回答