2009-11-10 84 views
1

我想从Rails/Prototype从远程站点检索JSON数据。JSONP与Rails

我发现有a branch of PrototypeAjax.JSONRequest()函数。我无法得到这个工作。

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

我错过了什么?这看起来很容易用Rails或Prototype完成。

+0

我有点困惑。你提到你想让Rails获得json,但是想使用JavaScript?您想要提出请求的人 - 服务器还是客户端? – 2009-11-10 19:01:54

+0

我在问是否有JSONP的Rails助手。客户端或服务器端。为了清晰起见,编辑原始帖子。 – mculp 2009-11-10 19:07:13

回答

1

您是否需要使用Rails助手来使客户端请求JSON?这很容易与Prototype

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

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

+0

这不适用于远程站点。 – mculp 2009-11-11 17:11:54

1

没有内置于专门针对jsonp的rails中,但如果您希望您的rails应用程序能够与jsonp一起使用,那么您可以执行一些操作。

  • 在配置创建一个JSONP MIME类型/初始化/ mime_types.rb
  • 延长了to_jsonp方法会在你通过回调包裹调用JSON对象。是这样的:

高清to_jsonp(回调,选择= {}) “#{}回调(#{self.to_json(选项)})” 结束

  • 遵循这个家伙的文章。

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

3

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

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

require "rack/contrib/jsonp" 

class Application < Rails::Application 
    config.middleware.use Rack::JSONP 
end 
+3

现在有一个gem,rack-jsonp,它的工作原理是一样的。在Rails 3.x应用程序中,您不需要'require',只需将'gem'rack-jsonp''添加到您的Gemfile和'bundle install'。 – cfeduke 2012-09-11 02:19:06