PHP JSON

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

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

PHP файл

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

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

PHP файл

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

Отображение PHP файла

Клиентский JavaScript

Это JavaScript на клиенте, использующий вызовы AJAX для запроса PHP файла из примера:

Пример

использование JSON.parse() Преобразование результатов в 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();

Попробуйте сами

PHP массив

Используя PHP функцию json_encode() в PHP массив также будет преобразован в JSON:

PHP файл

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

Отображение PHP файла

Клиентский JavaScript

Это JavaScript на клиенте, использующий вызовы AJAX для запроса PHP файла из примера:

Пример

Используйте JSON.parse() Преобразование результатов в 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();

Попробуйте сами

PHP база данных

PHP - это серверный языковой скрипт, который должен использоваться для операций, выполняемых только на сервере, таких как доступ к базе данных.

Представьте себе, что на сервере есть база данных, содержащая данные о клиентах, продуктах и поставщиках.

В этот момент вам нужно запросить сервер, чтобы получить первые十条 записей из таблицы "клиенты":

Пример

Используйте JSON.stringify() Преобразование JavaScript объекта в 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();

Попробуйте сами

Пример объяснения:

  • Определение объекта, содержащего атрибуты table и limit.
  • Преобразуйте этот объект в строку JSON.
  • Отправьте запрос к этому PHP файлу, где JSON является параметром.
  • Ожидайте, пока запрос вернет результат (в формате JSON).
  • Отображайте полученные от PHP файла результаты.

Просмотрите PHP файл

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

Объяснение PHP файла:

  • Преобразуйте запрос в объект, используя PHP функцию json_decode().
  • Доступ к базе данных, заполнение массива запрашиваемыми данными.
  • Добавьте массив к объекту, используя json_encode() Функция возвращает объект в формате JSON.

Пробегитесь по результатам

Преобразуйте полученные от PHP файла результаты в объект JavaScript, или, в данном примере, в массив JavaScript:

Пример

использование JSON.parse() Преобразуйте JSON в объект 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;
    });
});
 ...

Попробуйте сами

PHP метод = POST

Обычно лучше использовать метод HTTP POST для отправки данных на сервер.

Если нужно использовать метод POST для отправки AJAX-запроса,specify this method and the correct header.

Теперь данные, отправляемые на сервер, должны быть .send(); Параметры метода:

Пример

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

Попробуйте сами

Единственным отличием PHP файла является способ получения переданных данных.

PHP файл

использование $_POST вместо $_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);
?>