Dojo、JSONP、およびすべてすべて

こんにちは、ハブラー、レディとハブラ。 今日は、サイト用のAPIの作成について説明します。 トピックの一部が吸い込まれていることは知っていますが、プロジェクトの1つでAPIを開発するときに特定の情報が不足していることに気付きました。

JSONP、SMD、およびDojo dojox.rpc.Serviceコンポーネントについて説明します。

面白い? -猫の下でお願いします。



ストーブから始めましょう。



JSONP (JSON Padding)または「JSON padded」は、 Wikipediaへの入力引数としてコールバック関数の名前が指定されている場合のJSON拡張です

秘trickは、結果として、サーバーがこの関数自体を呼び出すためのJavaScriptコードを返し、データ自体がサーバーに転送されることです。 したがって、クライアント側でこのコードを接続することにより、通常のAjaxインタラクションの同じオリジン制限をバイパスできます。



SMD SMD(サービスメッセージの説明)-JSON言語に基づいた、Webサービスの説明とそれらへのアクセスのための言語。

単純なsmdファイルの例を示します。

{ transport: "JSONP", envelope: "URL", target: "http://mysite.org/api/find", parameters: [ { name: "appid", optional: false, "default": "client" } ], services: { service1: { target: "http://mysite.org/api/find_image", parameters: [ { name: "query", type: "string", optional: false, "default": "" }, { name: "max_height", type: "integer", optional: true }, ] }, service2: { target: "http://mysite.org/api/find_video", parameters: [ { name: "query", type: "string", optional: false, "default": "" } ] }, } }
      
      







ご覧のとおり、smdファイルは2つの部分に分割できます-デフォルトのパラメーターと特定のサービスのパラメーターを持つブロックです。

私はすべてのパラメーターの名前を解読することについては語りません-それらは彼ら自身のために語ります-私はdojox.rpc.Serviceのフレームワーク内でのみに注意します

transportパラメーターは、 POST、GET、JSONPのいずれかの値を取ることができます

エンベロープパラメーター-URL、JSON、PATHのいずれか



おいしいか、それを機能させる方法について



 var smd = new dojox.rpc.Service("/smd/api_1.smd"); var d = smd.service1({query:"image_001"}); d.addCallback(function(result) { alert("gotcha! " + result); });
      
      







smd.service1({クエリ: "image_001"})

この行は、コールバック関数(または複数)を割り当てることができる遅延オブジェクトを返します。

これで、名前でサービスにアクセスでき、場所に設定ファイルがあります。



備考:

始める



1. JSONPトランスポートを使用するには、 dojo.io.scriptライブラリを接続する必要があります

2.「一致が見つかりません」エラーを回避するため、 dojo.io.scriptの前にdojox.rpc.Serviceコンポーネントをロードする必要があります。

3.応答としてのサーバーは、 コールバックパラメーターで渡される名前を持つ関数の呼び出しで、スクリプトの本体(ペアのスクリプトタグなし)を返す必要があります。 エラーを回避するには、 未定義の関数をチェックする必要があります-habrahabr.ru/post/62314



終わり。



さて、それですべてです。ご清聴ありがとうございました。 訂正を歓迎します;労働者の要求に応じて、記事を補足することができます(おそらく何かが見落とされています)。



All Articles