JSON PHP

JSON的常规用途是从web服务器读取数据,然后在网页中显示这些数据。

本章向您讲解如何在客户端与PHP服务器之间交换JSON数据。

PHP-Datei

PHP提供处理JSON的内建函数。

通过使用PHP函数 json_encode(),PHP中的对象可转换为JSON:

PHP-Datei

<?php
$myObj->name = "Bill Gates";
$myObj->age = 62;
$myObj->city = "Seattle";
$myJSON = json_encode($myObj);
echo $myJSON;
?>

Zeigen Sie PHP-Datei an

Clientseitiges JavaScript

Dies ist JavaScript auf dem Client, das AJAX-Aufrufe verwendet, um den PHP-Datei aus dem obigen Beispiel anzufordern:

Beispiel

Verwenden JSON.parse() Konvertieren Sie die Ergebnisse in 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();

Probieren Sie es selbst aus

PHP-Array

Beim Verwenden der PHP-Funktion json_encode() wird auch das Array in PHP in JSON konvertiert:

PHP-Datei

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

Zeigen Sie PHP-Datei an

Clientseitiges JavaScript

Dies ist JavaScript auf dem Client, das AJAX-Aufrufe verwendet, um den PHP-Datei aus dem obigen Beispiel anzufordern:

Beispiel

Verwenden Sie JSON.parse() Konvertieren Sie die Ergebnisse in 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();

Probieren Sie es selbst aus

PHP Datenbank

PHP ist eine Server-Sprache für Serverseitige Programmierung und sollte für Operationen verwendet werden, die nur vom Server ausgeführt werden können, wie z.B. Datenbankzugriff.

Stellen Sie sich vor, es gibt eine Datenbank auf dem Server, die Daten von Kunden, Produkten und Lieferanten enthält.

In diesem Moment müssen Sie den Server anfordern, um die ersten zehn Einträge im "Kunden"-Tabellen zu erhalten:

Beispiel

Verwenden Sie JSON.stringify() Konvertieren Sie JavaScript-Objekte in 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();

Probieren Sie es selbst aus

Beispiel erläutert:

  • Definieren Sie ein Objekt, das die Attribute 'table' und 'limit' enthält.
  • Konvertieren Sie dieses Objekt in eine JSON-Zeichenfolge.
  • Senden Sie eine Anfrage an diese PHP-Datei, bei der JSON als Parameter verwendet wird.
  • Warten Sie, bis die Anfrage das Ergebnis zurückgibt (als JSON).
  • Zeigen Sie das Ergebnis an, das vom PHP-Datei erhalten wird.

Betrachten Sie die PHP-Datei

PHP-Datei

<?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-Datei Erklärung:

  • Konvertieren Sie die Anfrage in ein Objekt, verwenden Sie die PHP-Funktion json_decode().
  • Zugriff auf die Datenbank, füllen Sie das Array mit den angeforderten Daten.
  • Fügen Sie das Array zum Objekt hinzu, verwenden Sie json_encode() Die Funktion gibt das Objekt als JSON zurück.

Durchsuchen Sie das Ergebnis

Konvertieren Sie das Ergebnis, das vom PHP-Datei erhalten wird, in ein JavaScript-Objekt oder, wie im Beispiel, ein JavaScript-Array:

Beispiel

Verwenden JSON.parse() Konvertieren Sie JSON in ein 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;
    });
});
 ...

Probieren Sie es selbst aus

PHP-Methode = POST

Bei der Übermittlung von Daten an den Server ist es in der Regel am besten, das HTTP POST-Verfahren zu verwenden.

Um AJAX-Anfragen mit dem POST-Verfahren zu senden, geben Sie dieses Verfahren und die richtigen Header an.

Die Daten, die an den Server gesendet werden, müssen jetzt sein .send(); Methodenparameter:

Beispiel

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

Probieren Sie es selbst aus

Der einzige Unterschied in der PHP-Datei ist die Methode, um die übertragenen Daten zu erhalten.

PHP-Datei

Verwenden $_POST statt $_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);
?>