0

www.healthgrades.com のオートコンプリート ウィジェットを見て、ネットワークの応答を調べました。

データはJSONだと思いますが、ある種のエンコーディング/フィルターを通過してエスケープされ、jQueryタグで返されたようです(おそらくキャッシュバスター?)。

ごく一部のデータは、次のようになります。

jQuery17207977216457948089_1379039838014([{"ItemIds":null,"LinkUrl":"/hospital-directory/texas-tx-central/scott-and-white-memorial-hospital-hgst712bc8b6450054","Text":"Scott and White Memorial Hospital","PlainText":null,"Type":"tophospital","TrackingName":null,"StateAbbreviation":null,"Data":null},{"ItemIds":null,"LinkUrl":"/hospital-directory/texas-tx-austin/st-davids-medical-center-hgst613bc8b6450431","Text":"St. David\u0027s Medical Center","PlainText":null,"Type":"tophospital","TrackingName":null,"StateAbbreviation":null,"Data":null},{"ItemIds":null,"LinkUrl":"/hospital-directory/texas-tx-southern/st-davids-georgetown-hospital-hgst182bc8b6450191","Text":"St. David\u0027s Georgetown Hospital","PlainText":null,"Type":"tophospital","TrackingName":null,"StateAbbreviation":null,"Data":null},{"ItemIds":null,"LinkUrl":"/hospital-directory/texas-tx-austin/heart-hospital-of-austin-hgstbb7ecdaa450824","Text":"Heart Hospital of Austin","PlainText":null,"Type":"tophospital","TrackingName":null,"StateAbbreviation":null,"Data":null},{"ItemIds":null,"LinkUrl":"/hospital-directory/texas-tx-austin/st-davids-north-austin-medical-center-hgst234bc8b6450809","Text":"St. David\u0027s North Austin Medical Center","PlainText":null,"Type":"tophospital","TrackingName":null,"StateAbbreviation":null,"Data":null}]);

これを行う利点は何ですか?私の仮定が間違っている場合、ここで何が起こっているのでしょうか?

4

2 に答える 2

2

これはjsonpリクエストのレスポンス形式であり、ページがロードされた場所とは異なるドメインへの ajax リクエストがブラウザによって阻止されるという、ajax リクエストに対する同じ生成元 ポリシーの制限を克服するために使用される手法です。

この特定のケースでは、ページと ajax リソースの両方が同じドメインにあるため、あまり役に立ちません。

于 2013-09-13T02:53:58.110 に答える
2

jQuery のJSONPサポートの例です。

JSONP に慣れていない方のために説明すると、「JSON with Padding」です。パディングは、JSON を引数とするグローバル関数の呼び出しです。

先頭の名前 はjQuery17207977216457948089_1379039838014、リクエストの開始時に jQuery が生成したグローバル関数です。?また、 query-stringのプレースホルダーを使用して、すべてのリクエストに対して 1 つ作成します。

このjsonp型は、クエリ文字列パラメーターをcallback=?URL に追加します。サーバーは、JSON データの先頭にコールバック名を追加して、有効な JSONP 応答を形成する必要があります。callbackに jsonp オプション以外のパラメータ名を指定できます$.ajax()

JSONP の主な利点は、クロスオリジン要求をサポートすることです。SOPによって制限されていないため、 ( を使用するのと同様に)<script>ではなくを作成することによってこれを行います。ただし、リクエストに限定されます。したがって、それは少しトレードオフです。XMLHttpRequest$.getScript()GET

そして、これはCORSの導入前に利用可能だったクロスオリジンのオプションでした。

余談ですが、JSONP は技術的には JavaScript として扱われる JSON であり、JavaScript から取った JSON の構文を利用しています。

于 2013-09-13T02:54:54.453 に答える