Poprvé jsem o JSONP slyšel, když jsem dostal technický posudek pro špičkovou společnost.
Když jsem to viděl, hned mě napadlo:co to je? proč to používáme? jak to funguje? a jak mohu použít JSONP ve svém projektu.
Takže zde sdílím odpověď na všechny tyto otázky na jednom místě!
Co je JSONP?
JSONP (JSON with Padding) je zápis objektů javascript slouží k načtení dat ze serveru pomocí skriptového tagu <script>
spíše než XMLHttpRequest.
Proč jej používáme?
Krátká odpověď je, že se používá, aby se předešlo problémům s Cross-Origin-Resource-Policy.
Zatímco zásada corss-domain blokuje přístup k souborům, umožňuje přístup ke skriptům z jiné domény. JSONP to používá k přístupu k datům prostřednictvím značky skriptu.
Aby toho bylo dosaženo, jsou objekty JSONP zabaleny do funkce zpětného volání.
//JSON Example
{"Name": "Foo", "Id": 1234, "Rank": 7};
//JSONP Example - In this you can call a function
functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});
Jak to funguje?
-
Klient (obvykle JavaScript) musí poskytnout funkci zpětného volání, do které se data později přenesou spolu s dalšími daty, která chce klient odeslat.
-
Přenos dat je vyvolán na klientovi formulováním volání skriptu. Je zadáno URL webové služby na serveru doplněné o název funkce zpětného volání. Hotový "script" tag pak musí být vložen do DOM (Domain Object Model). Tento proces se nazývá „vložení značky skriptu“ a spouští přenos dat.
-
Webová služba na straně serveru převezme data, extrahuje název funkce zpětného volání a použije je k ohraničení dat serveru pomocí příslušného volání funkce, když jsou odeslána zpět.
-
Prohlížeč obdrží odpověď serveru zpět ve formě skriptu a okamžitě začne skript spouštět. Vzhledem k tomu, že skript sestává z volání funkce, je volána funkce "callback" a ta přijímá data jako parametr.
Jak mohu použít JSONP ve svém projektu?
Javascript:
async () => {
const jsonpCallback = "<CALLBACK_FUNCTION_NAME>";
const response = await fetchJsonp(`<API_URL>`, {
jsonpCallback,
});
const data = await response.json();
return data;
}
Konečně
Doufám, že vám tento článek pomohl,