JSON PHP
Công dụng phổ biến của JSON là đọc dữ liệu từ máy chủ web và hiển thị dữ liệu trong trang web.
Chương này sẽ hướng dẫn bạn cách trao đổi dữ liệu JSON giữa máy khách và máy chủ PHP.
Tệp PHP
PHP có một số hàm dựng sẵn để xử lý JSON.
Các đối tượng trong PHP có thể được chuyển đổi thành JSON bằng cách sử dụng hàm PHP json_encode() :
tập tin PHP
<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New
York";
$myJSON = json_encode($myObj);
echo $myJSON;
?>
Hiển thị tệp PHP »JavaScript của khách hàng
Đây là một đoạn JavaScript trên máy khách, sử dụng lệnh gọi AJAX để yêu cầu tệp PHP từ ví dụ trên:
Ví dụ
Sử dụng JSON.parse() để chuyển đổi kết quả thành đối tượng 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();
Hãy tự mình thử » Mảng PHP
Mảng trong PHP cũng sẽ được chuyển đổi thành JSON khi sử dụng hàm PHP json_encode() :
tập tin PHP
<?php
$myArr = array("John", "Mary", "Peter", "Sally");
$myJSON = json_encode($myArr);
echo $myJSON;
?>
Hiển thị tệp PHP »JavaScript của khách hàng
Đây là một đoạn JavaScript trên máy khách, sử dụng lệnh gọi AJAX để yêu cầu tệp PHP từ ví dụ về mảng ở trên:
Ví dụ
Sử dụng JSON.parse() để chuyển đổi kết quả thành một mảng 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();
Hãy tự mình thử »Cơ sở dữ liệu PHP
PHP là ngôn ngữ lập trình phía máy chủ và có thể được sử dụng để truy cập cơ sở dữ liệu.
Hãy tưởng tượng bạn có một cơ sở dữ liệu trên máy chủ của mình và bạn muốn gửi yêu cầu đến cơ sở dữ liệu đó từ máy khách nơi bạn yêu cầu 10 hàng đầu tiên trong bảng có tên là "khách hàng".
Trên máy khách, tạo một đối tượng JSON mô tả số hàng bạn muốn trả về.
Trước khi bạn gửi yêu cầu đến máy chủ, hãy chuyển đổi đối tượng JSON thành một chuỗi và gửi nó dưới dạng tham số tới url của trang PHP:
Ví dụ
Sử dụng JSON.stringify() để chuyển đổi đối tượng JavaScript thành 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();
Hãy tự mình thử »Ví dụ giải thích:
- Xác định một đối tượng chứa thuộc tính và giá trị "giới hạn".
- Chuyển đổi đối tượng thành chuỗi JSON.
- Gửi yêu cầu tới tệp PHP, với chuỗi JSON làm tham số.
- Đợi cho đến khi yêu cầu trả về kèm theo kết quả (dưới dạng JSON)
- Hiển thị kết quả nhận được từ file PHP.
Hãy xem tệp PHP:
tập tin 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);
?>
Tệp PHP đã giải thích:
- Chuyển đổi yêu cầu thành một đối tượng bằng cách sử dụng hàm PHP json_decode() .
- Truy cập cơ sở dữ liệu và điền vào một mảng dữ liệu được yêu cầu.
- Thêm mảng vào một đối tượng và trả về đối tượng dưới dạng JSON bằng hàm json_encode() .
Sử dụng dữ liệu
Ví dụ
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;
}
Hãy tự mình thử »Phương thức PHP = POST
Khi gửi dữ liệu đến máy chủ, tốt nhất nên sử dụng phương thức HTTP POST
.
Để gửi yêu cầu AJAX bằng phương thức POST
, hãy chỉ định phương thức và tiêu đề chính xác.
Dữ liệu được gửi đến máy chủ bây giờ phải là đối số của phương thức send()
:
Ví dụ
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);
Hãy tự mình thử »Sự khác biệt duy nhất trong tệp PHP là phương thức lấy dữ liệu được truyền.
tập tin PHP
Sử dụng $_POST thay vì $_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);
?>