シナトラ、JavaScriptのクロスドメインの要求をJSON
-
22-09-2019 - |
質問
行っREST APIを構築の上でシナトラ.いいたい書けjQueryるスクリプトを取り出しからのデータのAPIに含まれています。
シナトラがと言われ応答JSON
before do
content_type :json
end
簡単なルートのように見え
get '/posts' do
Post.find.to_json
end
私のjQueryスクリプトはajax通
$.ajax({
type: 'get',
url: 'http://api.com/posts',
dataType: 'json',
success: function(data) {
// do something
}
})
実際にもの作品との両方に同じIP、APIを要求するJS.私ために遊んでもJSONPのためのラックな成果です。かけが必要なヒントな進め方を詰めていきます。
解決
使用する jsonp (パディング付きJSON)。があります JSONP拡張機能 ラック用。
基本的に、あなたは呼び出す:
$.ajax({
type: 'get',
url: 'http://api.com/posts',
dataType: 'jsonp',
success: function(data) {
// do something
}
})
次のようなリクエストに変換されます。
http://api.com/posts?callback=someJSFunc
そして、あなたのサーバーは応答します、例:
someJSFunc({"json":"obj"});
もちろん、クライアントはjQueryなしでJSONPリクエストを行うことができます。 JSONPのトリックは、純粋なJSONではなくクロスドメインであることができるスクリプトを提供することです。
他のヒント
これまでの回答をありがとう。あなたは正しかったので、JSONPは問題を解決します。 JavaScriptのコードスニペットは正常に動作します。シナトラはラックの上に構築されているため、非常に簡単です。したがって、ラックコントリブジェムを簡単にインストールします
gem install rack-rack-contrib --source=http://gems.github.com/
(またはgemfileに入れてください)
require 'rack/contrib/jsonp'
use Rack::JSONP
あなたのアプリケーションに。
このミドルウェアは、通常のJSONにJSONP以外のクライアントに、JSONPにJQuery&Coを提供します。
それはあなたにとって面白いかもしれません http://github.com/shtirlic/sinatra-jsonp - この拡張機能は、欠落している機能をシナトラに追加します
gemとしても利用できます gem install sinatra-jsonp
う呼
$.getJSON("http://example.com/?callback=?",function(data) { alert(data); });
このサンプルではメインキーワードが構築"callback=?", ばなければなりませんでしこparamをサーバー側のスクリプトは、有効なJSONPす:
function({ "foo" : "bar" });
が"機能"はランダムなデータにより生成されるjQueryます。もっと読む こちらの 約jQueryクロスドメインのJSONP.