Jak w temacie. Jakie możliwości daje ta metoda? Jak możną ją wykorzystać?
Jak w temacie. Jakie możliwości daje ta metoda? Jak możną ją wykorzystać?
"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).