JSON PHP
- Föregående sida JSON server
- Nästa sida 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; ?>
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();
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; ?>
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();
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();
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; }); }); ...
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);
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); ?>
- Föregående sida JSON server
- Nästa sida JSON HTML