JSON PHP

JSON 的常规用途是从 web 服务器读取数据,然后在网页中显示这些数据。

本章向您讲解如何在客户端与 PHP 服务器之间交换 JSON 数据。

PHP-fil

PHP 提供处理 JSON 的内建函数。

通过使用 PHP 函数 json_encode(),PHP 中的对象可转换为 JSON:

PHP-fil

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

Vis PHP-filen

Klient JavaScript

Dette er JavaScript på klienten, der bruger AJAX-anmodninger til at anmode om PHP-filen i eksemplet:

Eksempel

brug JSON.parse() Konverter resultaterne til JavaScript-objekt:

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();

Prøv det selv

PHP-array

Ved brug af PHP-funktionen json_encode() vil også konverteres til JSON i PHP:

PHP-fil

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

Vis PHP-filen

Klient JavaScript

Dette er JavaScript på klienten, der bruger AJAX-anmodninger til at anmode om PHP-filen i eksemplet:

Eksempel

Brug JSON.parse() Konverter resultaterne til 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();

Prøv det selv

PHP database

PHP er et server-side programmeringssprog, der skal bruges til operationer, der kun kan udføres af serveren, såsom adgang til databaser.

Forestil dig, at der er en database på serveren, der indeholder kunde-, produkt- og leverandørdata.

I øjeblikket skal du anmode om serveren om at få de første ti poster i "kunder"-tabellen:

Eksempel

Brug JSON.stringify() Konverter JavaScript-objekt til 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();

Prøv det selv

Eksempel på forklaring:

  • Definér et objekt, der indeholder egenskaberne 'table' og 'limit'.
  • Konverter dette objekt til en JSON-streng.
  • Send en anmodning til denne PHP-fil, hvor JSON bruges som parameter.
  • Venter indtil anmodningen returnerer et resultat (som JSON).
  • Vis resultaterne, der modtages fra PHP-filen.

Se PHP-filen

PHP-fil

<?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-fil forklaring:

  • Konverter anmodningen til et objekt ved hjælp af PHP-funktionen json_decode().
  • Hent data fra databasen og fyld arrayet med de anmodte data.
  • Tilføj arrayet til objektet ved hjælp af json_encode() Funktionen returnerer objektet som JSON.

Gennemgå resultaterne

Konverter resultaterne fra en PHP-fil til JavaScript-objekt, eller i dette eksempel, en JavaScript-array:

Eksempel

brug JSON.parse() Konverter JSON til JavaScript-objekt:

...
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;
    });
});
 ...

Prøv det selv

PHP-metode = POST

Det er normalt bedst at bruge HTTP POST-metoden, når du sender data til serveren.

Hvis du vil bruge POST-metoden til at sende AJAX-anmodninger, skal du specificere denne metode og de korrekte hoveder.

Data, der sendes til serveren, skal nu være .send(); Metodens parametre:

Eksempel

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);

Prøv det selv

Den eneste forskel i PHP-filen er metoden til at hente overført data.

PHP-fil

brug $_POST i stedet for $_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);
?>