PHP JSON
- Page précédente Serveur JSON
- Page suivante HTML JSON
JSON 的常规用途是从 web 服务器读取数据,然后在网页中显示这些数据。
本章向您讲解如何在客户端与 PHP 服务器之间交换 JSON 数据。
Fichier PHP
PHP 提供处理 JSON 的内建函数。
通过使用 PHP 函数 json_encode()
,PHP 中的对象可转换为 JSON:
Fichier PHP
<?php $myObj->name = "Bill Gates"; $myObj->age = 62; $myObj->city = "Seattle"; $myJSON = json_encode($myObj); echo $myJSON; ?>
JavaScript client-side
C'est du JavaScript client-side, utilisant des appels AJAX pour demander le fichier PHP de l'exemple précédent :
Exemple
Utiliser JSON.parse()
Convertir les résultats en objet JavaScript :
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();
Array PHP
En utilisant la fonction PHP json_encode()
lorsque, l'array PHP sera également converti en JSON :
Fichier PHP
<?php $myArr = array("Bill Gates", "Steve Jobs", "Elon Musk"); $myJSON = json_encode($myArr); echo $myJSON; ?>
JavaScript client-side
C'est du JavaScript client-side, utilisant des appels AJAX pour demander le fichier PHP de l'exemple précédent :
Exemple
Utilisez JSON.parse()
Convertir les résultats en tableau JavaScript :
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();
Base de données PHP
PHP est un langage de programmation serveur, qui devrait être utilisé pour des opérations qui ne peuvent être exécutées que par le serveur, comme l'accès à la base de données.
Imaginez qu'il y ait une base de données sur le serveur, contenant des données de clients, de produits et de fournisseurs.
À ce moment, vous devez demander au serveur pour obtenir les dix premières enregistrements de la table "client" :
Exemple
Utilisez JSON.stringify()
Convertir un objet JavaScript en 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();
Exemple d'explication :
- Définir un objet contenant les attributs table et limit.
- Convertir cet objet en chaîne de caractères JSON.
- Envoyer une requête à ce fichier PHP, avec JSON en tant que paramètre.
- Attendre jusqu'à ce que la requête retourne un résultat (en tant que JSON).
- Afficher le résultat reçu du fichier PHP.
Voir le fichier PHP
Fichier PHP
<?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); ?>
Explication du fichier PHP :
- Convertir la requête en objet en utilisant la fonction PHP
json_decode()
. - Accéder à la base de données, remplir le tableau avec les données demandées.
- Ajouter un tableau à l'objet en utilisant
json_encode()
La fonction renvoie l'objet en JSON.
Parcourir les résultats
Convertir le résultat reçu du fichier PHP en objet JavaScript, ou dans cet exemple, un tableau JavaScript :
Exemple
Utiliser JSON.parse()
Convertir JSON en objet JavaScript :
... 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; }); }); ...
Méthode PHP = POST
Lorsque vous envoyez des données au serveur, il est généralement préférable d'utiliser la méthode HTTP POST.
Pour utiliser la méthode POST pour envoyer une requête AJAX, veuillez spécifier cette méthode et les en-têtes corrects.
Les données envoyées au serveur doivent maintenant être .send();
Paramètres de la méthode :
Exemple
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);
L'unique différence dans le fichier PHP est la méthode d'obtention des données transmises.
Fichier PHP
Utiliser $_POST
au lieu de $_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); ?>
- Page précédente Serveur JSON
- Page suivante HTML JSON