JSON PHP
- Forrige side JSON server
- Næste side JSON HTML
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; ?>
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();
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; ?>
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();
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();
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; }); }); ...
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);
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); ?>
- Forrige side JSON server
- Næste side JSON HTML