【问题标题】:Rails: returning a controller object to AJAX callerRails:将控制器对象返回给 AJAX 调用者
【发布时间】:2017-10-21 22:04:22
【问题描述】:

我正在使用 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) -&gt;) 而不是 AJAX 方法的成功函数 (success: (response)-&gt;)。为什么即使 xhr 调用的状态是 200 或 ok,响应也不会转到成功函数?我想不明白。

【问题讨论】:

    标签: jquery ruby-on-rails ajax


    【解决方案1】:

    您需要使用 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
    

    【讨论】:

      【解决方案2】:

      您在 ajax 配置中的 URL 应该是 '/reports/report',因为 Ajax 中的 URL 是 '/controller/action' 并尝试使用 dataType: 'json',因为这是您从服务器看到的。

      【讨论】:

        【解决方案3】:

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

        === 控制器

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多