Rails ujs - 手动AJAX呈现HTML模板而不是JS模板

时间:2014-08-26 09:40:11

标签: ruby-on-rails ajax

我有一个包含搜索栏的产品页面。对于每个keyup我想要更新产品列表。

我的index.html.erb列出所有产品,index.js.erb将使用搜索到的产品重新填充列表。

问题是:Rails总是返回 HTML模板而不是JS模板

因此,当我选中Chrome中的NETWORK标签时,我会收到回复,但它包含HTML模板。

这是我的简化代码:

// js
$("#search").on("keyup", function() {
  var query = { search: $(this).val() };
  $.get("/products", query);
});

我的控制器只是一个简单的where子句:

# products_controller.rb
def index
  if params[:search]
    @products = Product.where("( LOWER(name) LIKE LOWER(?)", "%#{ params[:search] }%")
  else
    @products = Product.all
  end 

  respond_to do |format|
    format.html
    format.js
  end
end

JS模板仍然是inspect

// products/index.js.erb
console.log("<%= @products.inspect %>");

感谢。

1 个答案:

答案 0 :(得分:2)

可能是您layout回复中显示ajax的结果:

#app/controllers/products_controller.rb
Class ProductsController < ApplicationController
   def index
      ...
      respond_to do |format|
         format.js   { render layout: !request.xhr? }
         format.json { render json: @products.to_json }
      end
   end
end

如果您希望仅收到纯product个数据,则您需要按以下方式使用JSON

$.get("/products", query, dataType: "json");

这将使您能够接收json对象,这只是一组纯数据:

$.get("/products", query, dataType: "json", function(data){
   //json data will be here
});