JS Tutoriaal

JS TUIS JS Inleiding JS Waarheen JS Uitset JS Verklarings JS sintaksis JS Kommentaar JS veranderlikes JS Laat JS Konst JS-operateurs JS Rekenkunde JS Opdrag JS datatipes JS Funksies JS Voorwerpe JS Events JS Strings JS String Metodes JS String Soek JS String Templates JS nommers JS-nommermetodes JS Skikkings JS Skikking Metodes JS Array Sorteer JS Skikking Iterasie JS Array Konst JS Datums JS Datum Formate JS Datum Kry Metodes JS Datum Stel Metodes JS Wiskunde JS Random JS Booleans JS Vergelykings JS Voorwaardes JS Skakelaar JS Loop Vir JS Loop For In JS Loop Vir Van JS Loop Terwyl JS Break JS Iterables JS-stelle JS Kaarte JS tipe JS Tipe Omskakeling JS Bitwise JS RegExp JS foute JS Bestek JS Hysing JS Streng modus JS hierdie sleutelwoord JS Arrow Funksie JS Klasse JS JSON JS Ontfouting JS Stylgids JS Beste Praktyke JS foute JS prestasie JS Voorbehou Woorde

JS weergawes

JS weergawes JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Edge JS Geskiedenis

JS Voorwerpe

Voorwerpdefinisies Voorwerp Eienskappe Voorwerp Metodes Voorwerp vertoon Voorwerptoebehore Voorwerpkonstrukteurs Voorwerpprototipes Object Iterables Voorwerpstelle Voorwerpkaarte Voorwerpverwysing

JS Funksies

Funksie definisies Funksie parameters Funksie Aanroep Funksie oproep Funksie Pas toe Funksie sluitings

JS Klasse

Klasintro Klas Erfenis Klas Staties

JS Async

JS Terugbelle JS Asynchroon JS Beloftes JS Async/Wag

JS HTML DOM

DOM Inleiding DOM Metodes DOM-dokument DOM Elemente DOM HTML DOM-vorms DOM CSS DOM-animasies DOM-geleenthede DOM Gebeurtenis Luisteraar DOM-navigasie DOM nodusse DOM Versamelings DOM Node lyste

JS Browser BOM

JS venster JS skerm JS ligging JS Geskiedenis JS Navigator JS Popup Alert JS Tydsberekening JS koekies

JS Web API's

Web API Inleiding Webvorms API Webgeskiedenis API Webberging API Webwerker API Web haal API Web Geolocation API

JS AJAX

AJAX Intro AJAX XMLHttp AJAX-versoek AJAX-reaksie AJAX XML-lêer AJAX PHP AJAX ASP AJAX-databasis AJAX toepassings AJAX voorbeelde

JS JSON

JSON Inleiding JSON-sintaksis JSON vs XML JSON-datatipes JSON Ontleed JSON Stringify JSON-voorwerpe JSON-skikkings JSON-bediener JSON PHP JSON HTML JSON JSONP

JS vs jQuery

jQuery keurders jQuery HTML jQuery CSS jQuery DOM

JS grafika

JS grafika JS Canvas JS Plot JS Chart.js JS Google Chart JS D3.js

JS Voorbeelde

JS Voorbeelde JS HTML DOM JS HTML-invoer JS HTML-voorwerpe JS HTML-geleenthede JS Blaaier JS Redakteur JS Oefeninge JS Vasvra JS Sertifikaat

JS Verwysings

JavaScript-voorwerpe HTML DOM-voorwerpe


JSONP


JSONP is 'n metode om JSON-data te stuur sonder om bekommerd te wees oor kruisdomeinkwessies.

JSONP gebruik nie die XMLHttpRequestvoorwerp nie.

JSONP gebruik <script>eerder die merker.


JSONP Inleiding

JSONP staan ​​vir JSON met Padding.

Om 'n lêer van 'n ander domein te versoek kan probleme veroorsaak as gevolg van kruisdomeinbeleid.

Om 'n eksterne skrif van 'n ander domein te versoek, het nie hierdie probleem nie.

JSONP gebruik hierdie voordeel, en versoek lêers met behulp van die script tag in plaas van die XMLHttpRequestobjek.

<script src="demo_jsonp.php">

Die bedienerlêer

Die lêer op die bediener draai die resultaat in 'n funksie-oproep:

Voorbeeld

<?php
$myJSON = '{ "name":"John", "age":30, "city":"New York" }';

echo "myFunc(".$myJSON.");";
?>

Die resultaat gee 'n oproep terug na 'n funksie genaamd "myFunc" met die JSON-data as 'n parameter.

Maak seker dat die funksie op die kliënt bestaan.

Die JavaScript-funksie

Die funksie genaamd "myFunc" is op die kliënt geleë en gereed om JSON-data te hanteer:

Voorbeeld

function myFunc(myObj) {
  document.getElementById("demo").innerHTML = myObj.name;
}


Skep 'n dinamiese skripmerker

Die voorbeeld hierbo sal die "myFunc" funksie uitvoer wanneer die bladsy laai, gebaseer op waar jy die script tag geplaas het, wat nie baie bevredigend is nie.

Die skripmerker moet slegs geskep word wanneer dit nodig is:

Voorbeeld

Skep en voeg die <script>-merker in wanneer 'n knoppie geklik word:

function clickButton() {
  let s = document.createElement("script");
  s.src = "demo_jsonp.php";
  document.body.appendChild(s);
}

Dinamiese JSONP-resultaat

Die voorbeelde hierbo is steeds baie staties.

Maak die voorbeeld dinamies deur JSON na die php-lêer te stuur, en laat die php-lêer 'n JSON-voorwerp terugstuur op grond van die inligting wat dit kry.

PHP lêer

<?php
header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_GET["x"], false);

$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit);
$outp = array();
$outp = $result->fetch_all(MYSQLI_ASSOC);

echo "myFunc(".json_encode($outp).")";
?>

PHP-lêer verduidelik:

  • Skakel die versoek om in 'n objek deur die PHP-funksie json_decode() .
  • Toegang tot die databasis, en vul 'n skikking met die gevraagde data.
  • Voeg die skikking by 'n voorwerp.
  • Skakel die skikking om na JSON deur die json_encode() funksie te gebruik.
  • Draai "myFunc()" om die terugkeervoorwerp.

JavaScript voorbeeld

Die "myFunc"-funksie sal vanaf die php-lêer geroep word:

const obj = { table: "products", limit: 10 };
let s = document.createElement("script");
s.src = "jsonp_demo_db.php?x=" + JSON.stringify(obj);
document.body.appendChild(s);

function myFunc(myObj) {
  let txt = "";
  for (let x in myObj) {
    txt += myObj[x].name + "<br>";
  }
  document.getElementById("demo").innerHTML = txt;
}

Terugbelfunksie

Wanneer jy geen beheer oor die bedienerlêer het nie, hoe kry jy die bedienerlêer om die korrekte funksie te roep?

Soms bied die bedienerlêer 'n terugbelfunksie as 'n parameter:

Voorbeeld

Die php-lêer sal die funksie wat jy deurgee as 'n terugbelparameter noem:

let s = document.createElement("script");
s.src = "jsonp_demo_db.php?callback=myDisplayFunction";
document.body.appendChild(s);