Rails を使用した JSONP
-
19-09-2019 - |
質問
Rails/Prototypeを使用してリモートサイトからJSONデータを取得しようとしています。
あることを発見しました プロトタイプのブランチ それは Ajax.JSONRequest()
関数。これではうまくいきません。
jQueryには $.getJSON()
関数を使用していますが、いくつかのプロトタイプ関数を使用しているため、jQuery に切り替えたり、競合モードを使用したりしたくありません。
私には何が欠けているのでしょうか?これはRailsかPrototypeを使えば簡単にできそうです。
解決
あなたは、クライアントの要求JSONを作るためにRailsのヘルパーを使用する必要がありますか?これはプロトタイプの
と簡単です
new Ajax.Request('/some_url', {
method:'get',
onSuccess: function(transport){
var json = transport.responseText.evalJSON();
}
});
あなたはRailsのオブジェクト#のto_jsonをメソッドを使用して、/ some_urlがXHTTPRequestにJSON(好ましくはrespond_toを使用して?しかし、あなたはまた、request.xhrを確認することができますか?)で応答していることを確認する必要があります。
他のヒント
また、ラックのcontribに利用できるJSONPラックmiddlwareを使用することができます。これは、あなただけの追加&コールバッククエリ文字列に=の方法をして、コールバックメソッドに包まれたレールからの応答を持ってできるようになります。
ちょうどあなたのapplication.rbにこれを追加します:
require "rack/contrib/jsonp"
class Application < Rails::Application
config.middleware.use Rack::JSONP
end
jsonp 専用に Rails に組み込まれたものは何もありませんが、Rails アプリを jsonp と適切に連携させたい場合にできることがいくつかあります。
- config/initializers/mime_types.rb に jsonp MIME タイプを作成します。
- to_jsonp メソッドを使用してオブジェクトを拡張し、渡されたコールバックで json への呼び出しをラップします。何かのようなもの:
def to_jsonp(callback、options = {}) "#{callback}(#{self.to_json(options)})" end "
- この人の記事に従ってください。
http://blogs.sitepoint.com/2006/10/05/json-p-output-with-rails/