JSON PHP
Обычно JSON используется для чтения данных с веб-сервера и отображения данных на веб-странице.
В этой главе вы узнаете, как обмениваться данными JSON между клиентом и сервером PHP.
PHP-файл
В PHP есть несколько встроенных функций для обработки JSON.
Объекты в PHP можно преобразовать в JSON с помощью PHP функции json_encode():
PHP файл
<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";
$myJSON = json_encode($myObj);
echo $myJSON;
?>
Показать PHP файл »
Клиентский JavaScript
Вот код JavaScript на клиенте, использующий вызов AJAX для запроса файла PHP из приведенного выше примера:
Пример
Используйте JSON.parse() для преобразования результата в объект JavaScript:
const xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj.name;
}
xmlhttp.open("GET", "demo_file.php");
xmlhttp.send();
Попробуйте сами »
PHP-массив
Массивы в PHP также будут преобразованы в JSON при использовании PHP функции json_encode():
PHP файл
<?php
$myArr = array("John", "Mary", "Peter", "Sally");
$myJSON = json_encode($myArr);
echo $myJSON;
?>
Показать PHP файл »
Клиентский JavaScript
Вот код JavaScript на клиенте, использующий вызов AJAX для запроса файла PHP из приведенного выше примера массива:
Пример
Используйте JSON.parse() для преобразования результата в массив JavaScript:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj[2];
}
xmlhttp.open("GET", "demo_file_array.php", true);
xmlhttp.send();
Попробуйте сами »
База данных PHP
PHP — это серверный язык программирования, который можно использовать для доступа к базе данных.
Представьте, что у вас есть база данных на вашем сервере, и вы хотите отправить к ней запрос от клиента, где вы запрашиваете 10 первых строк в таблице под названием "customers" ("клиенты").
На клиенте создайте объект JSON, описывающий количество строк, которые вы хотите вернуть.
Прежде чем отправлять запрос на сервер, преобразуйте объект JSON в строку и отправьте его в качестве параметра URL-адресу страницы PHP:
Пример
Используйте JSON.stringify() для преобразования объекта JavaScript в JSON:
const limit = {"limit":10};
const dbParam = JSON.stringify(limit);
xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
document.getElementById("demo").innerHTML = this.responseText;
}
xmlhttp.open("GET","json_demo_db.php?x=" + dbParam);
xmlhttp.send();
Попробуйте сами »
Объяснение примера:
- Определить объект, содержащий свойство и значение "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");
$stmt = $conn->prepare("SELECT name FROM customers LIMIT ?");
$stmt->bind_param("s", $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($outp);
?>
Объяснение файла PHP:
- Преобразуйте запрос в объект, используя функцию PHP json_decode()
- Получите доступ к базе данных и заполните массив запрошенными данными
- Добавьте массив к объекту и верните объект в формате JSON с помощью функции json_encode()
Используйте данные
Пример
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
let text = "";
for (let x in myObj) {
text += myObj[x].name + "<br>";
}
document.getElementById("demo").innerHTML = text;
}
Попробуйте сами »
PHP Метод = POST
При отправке данных на сервер часто лучше использовать HTTP-метод POST
.
Чтобы отправлять запросы AJAX с помощью метода POST
, укажите метод и правильный заголовок.
Данные, отправляемые на сервер, теперь должны быть аргументом метода send()
:
Пример
const dbParam = JSON.stringify({"limit":10});
const xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
let text ="";
for (let x in myObj) {
text += myObj[x].name + "<br>";
}
document.getElementById("demo").innerHTML = text;
}
xmlhttp.open("POST", "json_demo_db_post.php");
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");
$stmt = $conn->prepare("SELECT name FROM customers LIMIT ?");
$stmt->bind_param("s",
$obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($outp);
?>