質問

行っ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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top