2

AJAX、jQuery、Phonegap を使用して iOS/Droid アプリを作成しています。バックエンドは、Web サービスを介してコンテンツを提供する Drupal 7 サイトです。ただし、JSONP コールバックの必要性については少し混乱しています。

私の理解では、クロス ドメイン リクエストを許可するには JSONP が必要です。また、部分的には、JSON データをコールバック関数内にラップしてオブジェクトにすることで機能します。

ただし、私が見つけたのは、コールバックなしで JSONP リクエストを送信し、コールバック関数なしで jQuery を介してデータを解析できることです。したがって、JSONP データは JSON データとまったく同じように見えます。

何か不足していますか?データを関数として提供することが JSONP の利点の 1 つである場合、プロセスのある段階でそれが必要になるのではないでしょうか? コールバック パラメータを送信しないことで、ある程度のセキュリティを回避しているのでしょうか?

ありがとう!

参考までに、ここに jQuery AJAX コードがあります。

$.ajax({
    type: 'GET',
    cache: false,
    url: 'http://www.example.com/mobile/menu/devel-gosto.jsonp',
    dataType: 'jsonp',
    timeout: menuLoadTimeout,
    success: function (data) {
        menu = populateSlider(data.tree, 0);
    }
}); 

そのため、dataType を 'jsonp' に設定し、JSONP データを返す Web サービスを呼び出しますが、コールバックは URL から除外します。Web サービスは、コールバック ラッパーなしで応答します。そして、すべてがうまくいきます。

4

4 に答える 4

3

JSONPは、HTMLページが1つのドメインから提供された場合、Webページ(クライアントに配信されると)は上のサイトに「Ajax呼び出し」を行うことができないと述べた同一生成元ポリシー(SOP)に応じて設計されました。別のドメイン。同じドメインに対して「Ajax呼び出し」が行われた場合は、すべて問題ありません。(おそらくあなたが見ているのはそれでしたか?)

これで、別のドメインに対してAjax呼び出しを行うことはできませんが、scriptタグを使用して、別のドメインでコードを呼び出すことができます(図を参照してください)ここで、スクリプトタグで別のドメインを呼び出し、JSONテキストを取得したとします。どうします?これがJSONPの出番です。サーバーが関数呼び出しでラップされたJSONを送り返す場合、その(ラップされた)オブジェクトを評価すると、「それを使って何かをしている」ことになります。

ただし、最近では、ほとんどのブラウザーがCORSをサポートしているため、JSONPは必要ありません。一部の古いブラウザはCORSをサポートしていませんが、これらはますます少なくなっています。

于 2012-08-04T22:41:18.347 に答える
3

JSONP 呼び出しは、コールバックなしでは機能しません。データはscriptタグにロードされ、コードがメソッド呼び出しの形式でない場合、結果は単にオブジェクトが破棄され、successコールバック メソッドが呼び出されることはありません。

ajax指定しない場合でも、メソッドは URL にコールバック パラメータを追加しています。

ドキュメントでは"jsonp"、設定の値の下でdataType:

「コールバックを指定するために、URL の末尾に「?callback=?」を追加します。」

http://api.jquery.com/jQuery.ajax/

于 2012-08-04T22:46:58.383 に答える
1

コールバックは必要ですか?

はい、間違いなく。コールバックは、 JSON-with- paddingの定義にとって重要です。なしでは、それは単なるJSONです。

于 2012-08-04T22:42:08.370 に答える