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

Afficher le fichier PHP

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

Essayez-le vous-même

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

Afficher le fichier PHP

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

Essayez-le vous-même

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

Essayez-le vous-même

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

Essayez-le vous-même

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

Essayez-le vous-même

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