2012-11-12 29 views

Odpowiedz

3

JSONP lub JSON with padding jest uzupełnieniem podstawowego formatu danych JSON. Zapewnia on metodę żądania danych z serwera w innej domenie, co jest zabronione przez typowe przeglądarki internetowe z powodu tej samej polityki pochodzenia.

Zgodnie z tą samą zasadą pochodzenia strona internetowa obsługiwana przez serwer1.przyklad.com nie może normalnie łączyć się z serwerem innym niż serwer1.przyklad.com lub komunikować się z nim.

Wyjątkiem jest element HTML. Wykorzystując otwarte zasady dla elementów, niektóre strony wykorzystują je do pobierania kodu JavaScript, który działa na dynamicznie generowanych danych w formacie JSON z innych źródeł. Ten wzorzec użycia jest znany jako JSONP.

Żądania pobrania JSONP nie JSON, ale arbitralny kod JavaScript. Są one oceniane przez interpreter JavaScript, a nie analizowane przez parser JSON.

Aby zobaczyć, jak działa ten wzór, należy najpierw rozważyć żądanie adresu URL, które zwraca dane JSON. Program JavaScript może zażądać tego adresu URL na przykład za pomocą XMLHttpRequest. Załóżmy, że UserId Foo to 1234. Przeglądarka wnioskiem o URLhttp: //server2.example.com/Users/1234, przekazując ID Foo, by otrzymać coś takiego:

{"Name": "Foo", "Id": 1234, "Rank": 7} 

Ten JSON dane mogą być dynamicznie wygenerowany zgodnie z parametrami zapytania przekazanymi w adresie URL. Tutaj element HTML określa jego src atrybut URL, który zwraca JSON:

<script type="text/javascript" 
    src="http://server2.example.com/Users/1234"> 
</script> 

Przeglądarka będzie w porządku, należy pobrać plik skryptu, ocenić jego zawartość, zinterpretować surowe dane JSON jako blok, i podać błąd składni. Nawet jeśli dane zostały zinterpretowane jako literał obiektów JavaScript, nie można uzyskać do nich dostępu za pomocą JavaScriptu działającego w przeglądarce, ponieważ bez przypisania zmiennych literały obiektów są niedostępne.

We wzorcu użycia JSONP żądanie adresu URL wskazywane przez atrybut src 's zwraca dane JSON, a wokół niego jest zawijane wywołanie funkcji. W ten sposób funkcja, która jest już zdefiniowana w środowisku JavaScript, może manipulować danymi JSON. JSONP ładunek może wyglądać tak:

functionCall({"Name": "Foo", "Id": 1234, "Rank": 7}); 

Połączenie funkcja „P” od jsonp - w „dopełnienie” wokół czystego JSON, lub zgodnie z pewnym [1] „przedrostek”. Zgodnie z konwencją przeglądarka podaje nazwę funkcji zwrotnej jako nazwany parametr zapytania, zwykle z wykorzystaniem nazwy JSONP lub wywołania zwrotnego, w swoim żądaniu na serwer, np.,

<script type="text/javascript" 
    src="http://server2.example.com/Users/1234?jsonp=parseResponse"> 
</script> 

W tym przykładzie, odebrany ładunek będzie:

parseResponse({"Name": "Foo", "Id": 1234, "Rank": 7}); 
Powiązane problemy