Rails:将控制器对象返回给AJAX调用者

时间:2017-10-21 22:04:22

标签: jquery ruby-on-rails ajax

我使用AJAX调用Rails控制器,拉取记录,然后将该记录返回到AJAX调用。我的AJAX请求如下(我正在使用CoffeScript):

jQuery ->
  $.ajax
    type: 'GET',
    url: '/reports',
    dataType: 'script',
    success: (response) ->
      console.log response
      return
    error: (response) ->
      console.log response
      return

我的控制器如下:

class ReportsController < ApplicationController

  def report
    @test_result = TestResult.first

    respond_to do |format|
      format.js { render json: @test_result.to_json }
      format.html
    end
  end

end

现在,我可以在AJAX中访问该对象,但是通过错误函数(error: (response) ->)而不是AJAX方法的成功函数(success: (response)->)。为什么响应不会成功,即使xhr调用的状态是200还是ok?我想不明白。

3 个答案:

答案 0 :(得分:2)

您需要使用dataType: 'json'进行AJAX调用,并使用状态代码返回format.json来自控制器的AJAX响应。

jQuery ->
  $.ajax
    type: 'GET',
    dataType: 'json',
    url: '/reports',
    dataType: 'script',
    success: (response) ->
      console.log response
      return
    error: (response) ->
      console.log response
      return

控制器

def report
  @test_result = TestResult.first

  respond_to do |format|
    format.json { render json: @test_result.to_json, status: :success }
    format.html
  end
end

答案 1 :(得分:1)

您在ajax配置中的网址应为'/reports/report',因为Ajax中的网址为'/controller/action'并尝试使用dataType: 'json',因为这是您从服务器进行的操作。

答案 2 :(得分:0)

我制定了自己的解决方案。希望对您有所帮助。

===控制器

def show
    @type = Type.find(params[:id])
    respond_to do |format|
      format.json { render json: @type.to_json, status: 200 }
      format.html
    end
  end

===咖啡文件

type_changed = (id) ->
  $.ajax
    type: 'GET'
    , url: "/types/#{id}"
    success: (data) ->
      console.log('Success')
      console.log(data)
      return
    error: (data) ->
      console.log('Error')
      console.log(data)
      return