PHP JSON
- Trang trước Máy chủ JSON
- Trang tiếp theo HTML JSON
JSON 的常规用途是从 web 服务器读取数据,然后在网页中显示这些数据。
本章向您讲解如何在客户端与 PHP 服务器之间交换 JSON 数据。
Tệp PHP
PHP 提供处理 JSON 的内建函数。
通过使用 PHP 函数 json_encode()
,PHP 中的对象可转换为 JSON:
Tệp PHP
<?php $myObj->name = "Bill Gates"; $myObj->age = 62; $myObj->city = "Seattle"; $myJSON = json_encode($myObj); echo $myJSON; ?>
JavaScript máy khách
Đây là JavaScript trên máy khách, sử dụng gọi AJAX để yêu cầu tệp PHP trong ví dụ trên:
thực thể
sử dụng JSON.parse()
Chuyển đổi kết quả thành đối tượng 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();
Mảng PHP
Khi sử dụng hàm json_encode()
thì mảng trong PHP cũng sẽ được chuyển đổi thành JSON:
Tệp PHP
<?php $myArr = array("Bill Gates", "Steve Jobs", "Elon Musk"); $myJSON = json_encode($myArr); echo $myJSON; ?>
JavaScript máy khách
Đây là JavaScript trên máy khách, sử dụng gọi AJAX để yêu cầu tệp PHP trong ví dụ trên:
thực thể
Vui lòng sử dụng JSON.parse()
Chuyển đổi kết quả thành mảng 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();
Cơ sở dữ liệu PHP
PHP là ngôn ngữ lập trình máy chủ, nên được sử dụng cho các thao tác chỉ có thể được thực hiện bởi máy chủ, chẳng hạn như truy cập cơ sở dữ liệu.
Hãy tưởng tượng có một cơ sở dữ liệu trên máy chủ, chứa dữ liệu khách hàng, sản phẩm và nhà cung cấp.
Lúc này, bạn cần yêu cầu máy chủ để lấy mười bản ghi đầu tiên trong bảng "khách hàng":
thực thể
Vui lòng sử dụng JSON.stringify()
Chuyển đổi đối tượng JavaScript thành 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();
Giải thích ví dụ:
- Định nghĩa đối tượng chứa thuộc tính table và thuộc tính limit.
- Chuyển đổi đối tượng này thành chuỗi JSON.
- Gửi yêu cầu đến tệp PHP này, với JSON làm tham số.
- Chờ đến khi yêu cầu trả về kết quả (dưới dạng JSON).
- Hiển thị kết quả nhận được từ tệp PHP.
Xem tệp PHP
Tệp 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); ?>
Giải thích tệp PHP:
- Chuyển đổi yêu cầu thành đối tượng bằng cách sử dụng hàm PHP
json_decode()
. - Truy cập cơ sở dữ liệu, lấp đầy mảng bằng dữ liệu yêu cầu.
- Thêm mảng vào đối tượng bằng cách sử dụng
json_encode()
Chức năng trả về đối tượng này bằng JSON.
Duyệt kết quả
Chuyển đổi kết quả nhận được từ tệp PHP thành đối tượng JavaScript, hoặc trong ví dụ này, một mảng JavaScript:
thực thể
sử dụng JSON.parse()
Chuyển đổi JSON thành đối tượng 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 phương thức = POST
Khi gửi dữ liệu lên máy chủ, tốt nhất thường là sử dụng phương thức HTTP POST.
Nếu muốn sử dụng phương thức POST để gửi yêu cầu AJAX, hãy chỉ định phương thức này và phần đầu chính xác.
Dữ liệu gửi lên máy chủ hiện tại phải là .send();
tham số của phương thức:
thực thể
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);
Tệp PHP duy nhất khác nhau là phương pháp lấy dữ liệu được truyền tải.
Tệp 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"); $result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit); $outp = array(); $outp = $result->fetch_all(MYSQLI_ASSOC); echo json_encode($outp); ?>
- Trang trước Máy chủ JSON
- Trang tiếp theo HTML JSON