Jquery ajax响应呈现为HTML而不是JS

时间:2014-11-03 09:55:05

标签: javascript jquery ruby-on-rails ajax

您好我正在进行ajax通话

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

我认为$ get的最后一个参数将确保响应呈现为Javascript,但它正在以HTML格式处理。我不明白为什么。

我的控制器索引操作:

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

我在index.js.erb

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

日志:

Started GET "/admin/accounts?page=2&_=1415008178615" for 127.0.0.1 at 2014-11-03 09:50:01 +0000
Processing by Admin::AccountsController#index as HTML
Parameters: {"page"=>"2", "_"=>"1415008178615"}

然后以

结束
  Rendered admin/accounts/_accounts.haml (207.1ms)
  Rendered admin/shared/_content_card.html.haml (210.7ms)
  Rendered admin/accounts/index.haml within layouts/admin (364.1ms)

3 个答案:

答案 0 :(得分:1)

非常感谢所有试图回答这个问题的人。问题原来是在config / routes.rb

namespace :admin, :defaults => { :format => "html" } do

此行默认所有要处理为HTML的请求,并在删除默认值后,并将以下代码添加到控制器中的索引操作中,这一切都完美无缺。

respond_to do |format|
  format.html
  format.js {render :layout => false }
end

答案 1 :(得分:0)

  

Jquery ajax响应呈现为HTML而不是JS

这可能是由于很多事情。锚标记的href与ajax请求的url相同所以我认为你的js函数根本没有被调用 而且它正在发送一个html请求,因为那是一个链接默认情况下。要检查它是否正在调用您的js函数,您可以在js函数中使用简单的console.log或alert语句,并检查它们是否被触发。此外,如果您使用的是turbolinks,那么您应该尝试使用jquery on function。尝试这样的事情:

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

编辑:

如果get函数不起作用,请尝试jquery的详细ajax method

$(document).on("click",".pagination a", function(e){
  e.preventDefault();
  var url = $(this).attr('href');
  $.ajax({
    type: "GET",
    url: url,
    dataType: "script"
  });
})

如果这不起作用,那么不要使用js调用ajax方法,只需使用link_to的remote选项,它也会干掉你的代码

= link_to "some anchor", some_route_path, remote: true

答案 2 :(得分:-1)

尝试将dataType(最后一个参数)的类型更改为JSON

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

从这里: http://api.jquery.com/jQuery.get/

dataType
Type: String
The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).

编辑: 这可能是您的RAILS服务器出错。您需要明确告诉rails路由渲染json。否则它呈现html模板。 因此,如果您将后端代码添加到此:

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

结果将是JSON

<强> EDIT2:

因此,如果您尝试获取脚本,可以尝试http://api.jquery.com/jQuery.getScript/

$.getScript(url, successCallback);