2

我正在尝试使用 Rails/Prototype 从远程站点检索 JSON 数据。

我发现Prototype 有一个分支,它有一个Ajax.JSONRequest()功能。我不能让它工作。

jQuery 有一个$.getJSON()函数,但我正在使用一些 Prototype 函数,我宁愿不切换到 jQuery 或使用无冲突模式。

我错过了什么?这似乎可以通过 Rails 或 Prototype 轻松完成。

4

3 回答 3

3

您还可以使用 rack-contrib 中提供的 JSONP rack middlware。这使您能够将 &callback=method 附加到您的查询字符串,并将来自 rails 的响应包装在您的回调方法中。

只需将其添加到您的 application.rb 中:

require "rack/contrib/jsonp"

class Application < Rails::Application
  config.middleware.use Rack::JSONP
end
于 2012-04-19T18:24:40.243 回答
1

您是否需要使用 Rails 助手来制作客户端请求 JSON?使用原型很容易

new Ajax.Request('/some_url', {
  method: 'get',
  onSuccess: function(transport) {
    var json = transport.responseText.evalJSON();
  }
});

您只需要使用 Rails 的 Object#to_json 方法确保 /some_url 使用 JSON 响应 XHTTPRequest(最好使用 respond_to?,但您也可以检查 request.xhr?)。

于 2009-11-10T19:56:51.780 回答
1

Rails 中没有专门针对 jsonp 内置,但如果您希望您的 rails 应用程序与 jsonp 配合使用,您可以做一些事情。

  • 在 config/initializers/mime_types.rb 中创建一个 jsonp mime-type
  • 使用 to_jsonp 方法扩展对象,该方法将在您传递的回调中包装对 json 的调用。就像是:

def to_jsonp(callback, options={}) "#{callback}(#{self.to_json(options)})" 结束

  • 关注这篇文章。

http://blogs.sitepoint.com/2006/10/05/json-p-output-with-rails/

于 2010-11-23T08:04:07.617 回答