Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedź (1)

  • 3

"JSON with padding" to jedna z technik komunikacji stosowanych w języku JavaScript. Umożliwia obejście "same origin policy" - polisy bezpieczeństwa stosowanej w przeglądarkach internetowych. Polisa ta ogranicza realizowanie żądań tylko do serwerów pochodzących z tej samej domeny (liczy się kombinacja URI scheme, hosta i numeru portu).

Jak to działa:

Załóżmy, że w ramach tworzonej aplikacji chcemy wyświetlać aktualne informacje pogodowe udostępniane przez zewnętrznego dostawcę. Serwer zwraca dane w formacie JSON, a więc po wprowadzeniu odpowiedniego adresu do przeglądarki przykładowa odpowiedź będzie miała postać:


{
  "city" : "Warsaw"
  "temp" : "26",
  "wind" : "east"
}



Próba wykonania żądania Ajax z poziomu JavaScript skończy się niepowodzeniem ze względu na wspomnianą polisę bezpieczeństwa, jednak, jeśli umieścimy w strukturze strony znacznik.


<script type="text/javascript" src="http://weather.org">, 



Przeglądarka będzie miała obowiązek załadować i zinterpretować wskazany skrypt. W naszym przypadku zwrócona zawartość może zostać zinterpretowana, jako literał obiektu jednak z powodu braku identyfikatora nie ma możliwości odwołania się do niego. Podczas żądania typu JSONP serwer opakowuje wynik - przekazuje go jako argument wywołania funkcji.  Nazwa funkcji może zostać zdefiniowana w ramach parametrów żądania (często jest to callback lub jsonp).
W rezultacie dla znacznika.


<script type="text/javascript" src="http://weather.org?callback=showCurrentWeather">



Wynik będzie wyglądał następująco:


 showCurrentWeather({
  "city" : "Warsaw"
  "temp" : "26",
  "wind" : "east"
});



Przeglądarka wywoła istniejącą w skrypcie funkcję showCurrentWeather i przekaże do niej otrzymane informacje pogodowe. Cały proces (generowanie i osadzanie znacznika script) może zostać wykonany dynamicznie z poziomu skryptu.

Ze względu na ograniczenia i krytykę JSONP zaleca się stosowanie nowej, alternatywnej metody Cross-origin resource sharing (CORS).

  • Odpowiedział
  • @ | 26.06.2013
  • TRENER ALTKOM AKADEMII