JSON PHP

JSON の一般的な用途は、ウェブサーバーからデータを読み取り、それをウェブページで表示することです。

この章では、クライアントと PHP サーバー間で JSON データを交換する方法について説明します。

PHP Bestand

PHP は JSON を処理する内蔵関数を提供します。

PHP 関数を使用して json_encode(),PHP 中のオブジェクトは JSON に変換できます:

PHP Bestand

<?php
$myObj->name = "Bill Gates";
$myObj->age = 62;
$myObj->city = "Seattle";
$myJSON = json_encode($myObj);
echo $myJSON;
?>

Toon PHP-bestand

Client-side JavaScript

Dit is JavaScript op de client-side, dat gebruik maakt van AJAX-aanroepen om de PHP-bestanden in het voorbeeld aan te roepen:

Voorbeeld

Gebruik JSON.parse() Converteer het resultaat naar een JavaScript-object:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()  {
    if (this.readyState == 4 && this.status == 200) {
         myObj = JSON.parse(this.responseText);
         document.getElementById("demo").innerHTML = myObj.name;
     });
});
xmlhttp.open("GET", "demo_file.php", true);
xmlhttp.send();

Probeer het zelf uit

PHP-array

Bij het gebruik van de PHP-functie json_encode() wanneer, de array in PHP wordt ook geconverteerd naar JSON:

PHP Bestand

<?php
$myArr = array("Bill Gates", "Steve Jobs", "Elon Musk");
$myJSON = json_encode($myArr);
echo $myJSON;
?>

Toon PHP-bestand

Client-side JavaScript

Dit is JavaScript op de client-side, dat gebruik maakt van AJAX-aanroepen om de PHP-bestanden in het voorbeeld aan te roepen:

Voorbeeld

Gebruik JSON.parse() Converteer het resultaat naar een JavaScript-array:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()  {
    if (this.readyState == 4 && this.status == 200) {
         myObj = JSON.parse(this.responseText);
         document.getElementById("demo").innerHTML = myObj[2];
     });
});
xmlhttp.open("GET", "demo_file_array.php", true);
xmlhttp.send();

Probeer het zelf uit

PHP-database

PHP is een server-side programmeertaal en moet worden gebruikt voor operaties die alleen door de server kunnen worden uitgevoerd, zoals toegang tot databases.

Denk aan een database op de server die klant-, product- en leveranciersgegevens bevat.

Op dit moment moet je de server verzoeken om de eerste tien records van de 'klant'-tabel te verkrijgen:

Voorbeeld

Gebruik JSON.stringify() Converteer een JavaScript-object naar JSON:

obj = { "table":"customers", "limit":10 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
     if (this.readyState == 4 && this.status == 200) {
        document.getElementById("demo").innerHTML = this.responseText;
    });
});
xmlhttp.open("GET", "demo_json_db.php?x=" + dbParam, true);
xmlhttp.send();

Probeer het zelf uit

Voorbeeldverklaring:

  • Definieer een object dat de eigenschappen 'table' en 'limit' bevat.
  • Converteer dit object naar een JSON-string.
  • Verstuur een verzoek naar dit PHP-bestand, waarbij JSON als parameter wordt verstrekt.
  • Wacht tot het verzoek een resultaat retourneert (als JSON).
  • Toon de resultaten die worden ontvangen van het PHP-bestand.

Bekijk het PHP-bestand

PHP Bestand

<?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 json_encode($outp);
?>

PHP-bestand uitleg:

  • Converteer de verzoek naar een object, gebruikmakend van de PHP-functie json_decode().
  • Toegang tot de database, vul het array met de verzochte gegevens.
  • Voeg het array toe aan het object met behulp van json_encode() De functie retourneert het object als JSON.

Doorloop de resultaten

Converteer de resultaten die van een PHP-bestand worden ontvangen naar een JavaScript-object, of in dit voorbeeld, een JavaScript-array:

Voorbeeld

Gebruik JSON.parse() Converteer JSON naar een JavaScript-object:

...
xmlhttp.onreadystatechange = function() {
     if (this.readyState == 4 && this.status == 200) {
         myObj = JSON.parse(this.responseText);
         for (x in myObj) {
             txt += myObj[x].name + "<br>";
        });
         document.getElementById("demo").innerHTML = txt;
    });
});
 ...

Probeer het zelf uit

PHP-methode = POST

Bij het verzenden van gegevens naar de server is het meestal het beste om de HTTP POST-methode te gebruiken.

Om een AJAX-verzoek met de POST-methode te verzenden, specificeer dan deze methode en de juiste headers.

De gegevens die naar de server worden gestuurd moeten nu zijn .send(); Parameters van de methode:

Voorbeeld

obj = { "table":"customers", "limit":10 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
     if (this.readyState == 4 && this.status == 200) {
         myObj = JSON.parse(this.responseText);
         for (x in myObj) {
             txt += myObj[x].name + "<br>";
        });
         document.getElementById("demo").innerHTML = txt;
    });
});
xmlhttp.open("POST", "demo_json_db.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("x=" + dbParam);

Probeer het zelf uit

De enige verschil in het PHP-bestand is de manier waarop de overgebrachte gegevens worden verkregen.

PHP Bestand

Gebruik $_POST in plaats van $_GET:

<?php
header("Content-Type: application/json; charset=UTF-8");
$obj =  json_decode($_POST["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 json_encode($outp);
?>