Rails中的ajax调用无法呈现js.haml

时间:2014-10-31 13:58:19

标签: jquery ruby-on-rails ajax ruby-on-rails-4

我正在关注Railscast#174以实现与ajax的分页。在我的account_controller.rb中:

  def index
    @accounts = Account.paginate(:page => params[:page], :per_page => 10)
  end

我在视图中使用haml格式,所以我有一个index.haml文件,其中包含了

= will_paginate @accounts

还包装了pagination.js文件

$(function () {
  $('.pagination a').click(function () {
    $.get(this.href, null, null, 'script');
    return false;
  });
});

我已经验证了访问了pagination.js代码。在控制台中,我看到响应代码200和html返回,但index.js.haml文件未呈现

alert("This is an AJAX request.");

Railscast正在使用js.erb扩展名,但我在项目的其余部分使用haml,我怀疑它可能与此有关但我无法弄清楚出了什么问题。有人会有想法吗?

4 个答案:

答案 0 :(得分:0)

您必须在js代码中使用event.preventDefault()

试试这个:

$(function () {
  $('.pagination a').click(function (event) {
    event.preventDefault();
    $.get(this.href, null, null, 'script');
    return false;
  });
});

答案 1 :(得分:0)

你能尝试这样做吗,

  $('.pagination').on('click', 'a', function (e) {
    e.preventDefault();
    $.get(this.href, null, null, 'script');
    return false;
  });

或者可能将它绑定到.container(如果你有一个,其中.container是你的整个内容所在的类)

由于你的alert()没有被显示,我怀疑虽然你的js已加载,但它不会被触发。

答案 2 :(得分:0)

Rails4使用turbo链接,不会重新加载整个页面。所以'页面准备好了#39; js触发器不会一直被触发,但在这些情况下,'页面:更改'触发了。

$(document).on("page:change ready", function(){
   $('.pagination a').click(function () {
...
});

答案 3 :(得分:0)

我必须将此代码添加到控制器: respond_to do |format| format.html format.js {render :layout => false } end