PHP JSON
- Предыдущая страница Сервер JSON
- Следующая страница HTML 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; ?>
Клиентский 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; ?>
Клиентский 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); ?>
- Предыдущая страница Сервер JSON
- Следующая страница HTML JSON