【问题标题】:Ajax GET request response missing data fieldAjax GET 请求响应缺少数据字段
【发布时间】:2019-03-26 13:51:22
【问题描述】:

我从我的 React 组件向我的后端 Rails 应用程序发出 GET 请求并收到成功的响应 (200),但是我在保存数据库对象列表的 respose 对象中缺少数据属性。这是我的 Ajax 请求

$.ajax({
  method: 'GET',
  url: '/dashboard/jobs/eligible',
  dataType: 'json',
  success: (response) => {
    console.log(response)
  }
});

当我执行 console.log(response.data) 时,我得到“未定义”。不过,我从后端得到一个对象的数组。

console.log(response) # [{...}] 持有数据库中的一个对象。

这是我的dashboard/jobs 控制器操作:

def eligible
    @eligible_jobs = EligibleJobsDatatable.new(current_user).call

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

我在项目中没有使用任何序列化程序。

我错过了什么吗?

【问题讨论】:

  • 您是否尝试过使用邮递员之类的工具来查看 API 的响应?那里的数据是否按预期返回?
  • 尝试使用format.json 而不是format.js
  • 我从后端得到了预期的数据,只是我在 Ajax 中没有data 字段response
  • format.json 返回相同的响应。
  • 在console.log之前写“debugger”,看看里面有什么响应。

标签: jquery ruby-on-rails reactjs


【解决方案1】:

回答是正确的。它是一个序列化的对象。

但是,我相信您需要遵循jsonapi 标准的回复。如果这是真的,我建议您使用一个可以将您的对象序列化为 JSON 的 gem,即fast_jsonapi

【讨论】:

  • 我刚刚更新了我的 call 方法以返回 { data: data },它现在可以工作了。奇怪的是,我认为 Ajax 总是默认返回 data 字段。
  • 不,你决定返回什么:)
【解决方案2】:

当我执行 console.log(response.data) 时,我得到“未定义”。不过,我从后端得到一个对象的数组。

它应该是这样工作的。

来自 Ajax 文档:

成功

类型:函数(任何数据,字符串 textStatus,jqXHR jqXHR ) 请求成功时调用的函数。函数得到 传递了三个参数:从服务器返回的数据,格式化 根据 dataType 参数或 dataFilter 回调 函数,如果指定;描述状态的字符串;和 jqXHR (在 jQuery 1.4.x 中,XMLHttpRequest)对象。

Ajax 请求接受数据参数、文本状态和请求对象。如果你想要这些,请像这样创建你的函数:

$.ajax({
  method: 'GET',
  url: '/dashboard/jobs/eligible',
  dataType: 'json',
  success: (data, status, obj) => {
    console.log(data)
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多