2009-11-10 87 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