web-dev-qa-db-ja.com

JSONPとBackbone.js

私が制御するREST apiでBackbone.jsを使用したいと思います。REST apiとBackboneスクリプトを別のドメインに配置したいと思っていました。ただし、これはクロスドメインリクエストであるため、残念ながらブロックされます。

Backbone.jsには、JSONPリクエストをサポートするための組み込み機能がありますか?または、代わりに、Backbone.js syncシステムにJSONPサポートを手動で追加した経験のある人はいますか?

26
Chris W.

REST APIをJSONPで使用することはできません。GETリクエストはJSONPでのみ呼び出すことができます(現在のドキュメントに新しい<script>タグを書き込んでから機能します。 javascriptコールバックを呼び出す...)。

すべてのHTTP動詞(POST、DELETE、PUT)を使用するには、CORSプロトコルを使用できます: http://www.w3.org/TR/access-control/

CORSは、ブラウザとWebサービスの間でネゴシエートされるプロトコルであり、クロスドメイン呼び出しからJavascriptコードを実行しても「OK」であることをブラウザに通知します。

これを使用するには、サーバーの応答にいくつかのカスタムヘッダーを含める必要があります。これは、クロスドメインリクエストを受け入れても問題がないことをブラウザに通知します。 RubyOnRailsで実装する方法を説明するブログ投稿があります(ただし、他のフレームワークと非常に似ているはずです...): http://www.tsheffler.com/blog/?p=428

これは最も単純なソリューションであり、同じドメインのどこにいるかのようにbackbone.jsを使用でき、現在のほとんどのブラウザー(Internet Explorer 8以降、Firefox 3.5以降、Safari 4以降、およびChrome)で動作します。

古いブラウザのサポートが必要な場合は、 easyXDM :を使用してバックボーンを機能させることができました。

easyXDMは、開発者が同一生成元ポリシーによって設定された制限を簡単に回避できるようにするJavascriptライブラリです。これにより、ドメインの境界を越えてjavascriptAPIを簡単に通信および公開できます。

これはもう少し複雑で、よく知られているiframeハック(GMaps、facebookウィジェットなどのjavascriptウィジェットで使用されることもあります)で機能します。

この助けを願っています!

20
Tricote

GET操作のJSONPサポートは、fetchのオプションを介して追加できます。

successハンドラーとerrorハンドラーを構成するのと同じハッシュに、次のようなオブジェクトを追加します。

{dataType: "jsonp"}

これにより、jsonpオプションがJQueryのajaxハンドラーに渡され、自動的に、モデル/コレクションを取得するためのJSONPがサポートされます。

34
RandallB