【问题标题】:Get JSON contents from Ruby on Rails server using AJAX使用 AJAX 从 Ruby on Rails 服务器获取 JSON 内容
【发布时间】:2014-06-09 11:10:04
【问题描述】:

我在 RoR 方面有一些经验,不过,我是 AJAX 事务的新手。我的目标是让 HTML5 + JavaScript 客户端和 Ruby on Rails 服务器在不同的机器上运行(最终)。

我想要的是 JavaScript 客户端以 JSON 格式从服务器获取内容,然后进行解析。我已经尝试了很多东西,比如添加“responseType”等,但都没有奏效。

我当前的 JavaScript 文件是这样的:

$(document).ready(function() {
      var xmlhttp = new XMLHttpRequest();
      xmlhttp.open("GET", "http://localhost:3000/contents", true);
      xmlhttp.send();

      alert(xmlhttp.responseText);
});

而我的RoR应用有一个路径“/contents”调用contents_controller.rb的索引函数,就是这样的:

def index
    @contents = Content.all.order('created_at DESC')

    respond_to do |format|
        format.html # index.html.erb
        format.json { render json: @contents }
    end
end

AJAX 甚至是正确的方法吗?我有点迷茫。

非常感谢!

【问题讨论】:

  • 当你有 jQuery 时,为什么还要使用 vanilla js 方法?看$.ajax。我认为 ajax 是否是正确的方法由您决定。

标签: javascript ruby-on-rails ajax json


【解决方案1】:

使用 jQuery,你可以这样做。

$.ajax({
  url: '/contents',
  type: 'GET',
  dataType: 'json',
  beforeSend: function (xhr) {
      xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
  },
  success: function(data){/* do something meaningful with data */},
  error: function(xhr, status, response) {/* your error callback */}
});

您的format.json 将处理您的回复。

【讨论】:

  • 成功了!只需将“url”更改为添加“.json”就可以了。非常感谢!
【解决方案2】:

您可以简单地调用 /contents.json(在每个 url 中添加 .json 以获取来自 json 模板的输出) 或者 如果您从不需要 html 视图,请将默认格式设置为 json。为此...

您可以修改您的 routes.rb 文件以指定默认格式。

routes.rb

resources :contents, defaults: {format: :json}

【讨论】:

  • 我不知道那个 .json 来获取 json 模板。谢谢!但是我尝试在上面的 JavaScript 代码中添加“.json”,但我仍然得到一个空答案...
  • 您需要有 json 输出的模板。就像 index.html.erb 为 html 渲染一样, index.json.jbuilder 也会为 json 请求渲染。您可以在其中一个脚手架中看到 json 模板(或生成脚手架并查看 /my_scffold_name.json 的工作原理)
  • Jbuilder 是另一种 DSL 语言
猜你喜欢
  • 1970-01-01
  • 2023-03-04
  • 2011-05-30
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 2011-03-11
相关资源
最近更新 更多