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

Visa PHP-fil

KlientJavaScript

Detta är JavaScript på klienten, som använder AJAX-anrop för att begära PHP-filen i föregående exempel:

Exempel

använd JSON.parse() Konvertera resultatet till 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();

Prova själv

PHP-array

När du använder PHP-funktionen json_encode() är, kommer PHP-arrayen också att konverteras till JSON:

PHP-fil

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

Visa PHP-fil

KlientJavaScript

Detta är JavaScript på klienten, som använder AJAX-anrop för att begära PHP-filen i föregående exempel:

Exempel

Använd JSON.parse() Konvertera resultatet till 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();

Prova själv

PHP-databas

PHP är ett serverSID-programmeringsspråk och bör användas för operationer som endast kan utföras av servern, som att komma åt databasen.

Tänk dig att det finns en databas på servern som innehåller kund-, produkt- och leverantörsdata.

Nu behöver du begära servern för att få de första tio posterna i "kunder"-tabellen:

Exempel

Använd JSON.stringify() Konvertera JavaScript-objekt till 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();

Prova själv

Exempel på förklaring:

  • Definiera objekt som innehåller egenskaperna "table" och "limit".
  • Konvertera detta objekt till en JSON-sträng.
  • Skicka en förfrågan till denna PHP-fil, där JSON används som parameter.
  • Vänta tills förfrågan returnerar ett resultat (som JSON).
  • Visa resultatet som mottas från PHP-filen.

Visa 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-filens förklaring:

  • Konvertera förfrågan till objekt, använda PHP-funktionen json_decode().
  • Åtkom database, fyll arrayen med de efterfrågade data.
  • Lägg till arrayen till objektet med json_encode() Funktionen returnerar objektet som JSON.

Genomför resultaten

Konvertera resultatet från PHP-filen till JavaScript-objekt, eller i detta exempel, en JavaScript-array:

Exempel

använd JSON.parse() Konvertera JSON till 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;
    });
});
 ...

Prova själv

PHP-metod = POST

När du skickar data till servern är det vanligtvis bäst att använda HTTP POST-metoden.

För att använda POST-metoden för att skicka AJAX-fostranden, ange denna metod och korrekt header.

Data som skickas till servern måste nu vara .send(); Metodens parametrar:

Exempel

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

Prova själv

Den enda skillnaden i PHP-filen är metoden för att hämta överförda data.

PHP-fil

använd $_POST istället för $_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);
?>