JavaScript JSON PHP
Обычно JSON используется для чтения данных с веб сервера и отображения данных на веб странице.
В этой главе вы узнаете, как обмениваться данными JSON между клиентом и сервером PHP.
Файл PHP
PHP имеет несколько встроенных функций для обработки JSON.
Объекты в PHP можно преобразовать в JSON с помощью функции PHP json_encode():
PHP Файл
<?php
$myObj->name = "Щипунов";
$myObj->age = 30;
$myObj->city = "New
York";
$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) {
var myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj.name;
}
};
xmlhttp.open("GET", "demo_file.php", true);
xmlhttp.send();
Попробуйте сами »
Массив PHP
Массивы в PHP также будут преобразованы в JSON при использовании функции PHP json_encode():
PHP Файл
<?php
$myArr = array("Щипунов", "Mary", "Щипунова", "Щипунова");
$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) {
var myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj[2];
}
};
xmlhttp.open("GET", "demo_file_array.php", true);
xmlhttp.send();
Попробуйте сами »
База данных PHP
PHP - это серверный язык программирования, который может использоваться для доступа к базе данных.
Представьте, что у вас есть база данных на вашем сервере, и вы хотите послать ей запрос от клиента, где вы запрашиваете первые 10 строк в таблице под названием "клиенты".
На клиенте создайте объект JSON, который описывает количество строк, которые вы хотите вернуть.
Прежде чем отправлять запрос на сервер, преобразуйте объект JSON в строку и отправьте его в качестве параметра на URL адрес страницы PHP:
Пример
Используйте JSON.stringify() для преобразования объекта JavaScript в JSON:
obj = { "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",
"json_demo_db.php?x=" + dbParam, true);
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().
Цикл через результат
Преобразуйте результат, полученный из файла 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
При отправке данных на сервер часто лучше использовать POST
метод HTTP.
Чтобы отправлять запросы AJAX с использованием метода POST
, укажите метод и правильный заголовок.
Данные, отправленные на сервер, теперь должны быть аргументом метода send()
:
Пример
obj = { "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", "json_demo_db_post.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");
$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);
?>