Tìm hiểu về JSON PHP - Fedu

CHÀO MỪNG BẠN ĐẾN VỚI THƯ VIỆN HỌC TẬP & ĐÀO TẠO CƠ BẢN

Tìm hiểu về JSON PHP

JavaScript

Hướng dẫn JavaScript

Biểu mẫu JavaScript

Đối tượng JavaScript

Hàm JavaScript

DOM JavaScript

Trình duyệt BOM

JavaScript Ajax

JavaScript Json

Việc sử dụng JSON phổ biến là đọc dữ liệu từ máy chủ web và hiển thị dữ liệu trong một trang web. Bài viết này sẽ hướng dẫn bạn cách trao đổi dữ liệu JSON giữa máy client và máy chủ PHP.

Tệp tin PHP

PHP có một số hàm được tích hợp 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():

<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";

$myJSON = json_encode($myObj);

echo $myJSON;
?>

Máy client JavaScript

Đây là một JavaScript trên máy client, sử dụng hàm gọi AJAX để yêu cầu tệp PHP từ ví dụ trên. Sử dụng JSON.parse() để chuyển đổi kết quả thành một đối tượng 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();

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():

<?php
$myArr = array("John", "Mary", "Peter", "Sally");

$myJSON = json_encode($myArr);

echo $myJSON;
?>

Máy client JavaScript

Đây là một JavaScript trên máy client, sử dụng hàm gọi AJAX để yêu cầu tệp PHP từ ví dụ mảng trên. 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) {
        var 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à một ngôn ngữ lập trình phía máy chủ, và nên được sử dụng cho các hoạt động mà chỉ có thể được thực hiện bởi một máy chủ, như truy cập vào một 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ủ chứa khách hàng, sản phẩm và nhà cung cấp. Bạn muốn thực hiện yêu cầu tới máy chủ nơi bạn yêu cầu 10 hồ sơ đầu tiên trong bảng “customers”. 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", "json_demo_db.php?x=" + dbParam, true);
xmlhttp.send();

Giải thích ví dụ trên:

  • Xác định một đối tượng có chứa thuộc tính table và thuộc tính giới hạn.
  • Chuyển đổi đối tượng thành một chuỗi JSON.
  • Gửi yêu cầu đến tệp PHP, với chuỗi JSON làm tham số.
  • Chờ cho đến khi yêu cầu trả về kết quả (như JSON)
  • Hiển thị kết quả nhận được từ tệp PHP.

Tệp PHP như sau:

<?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 về tệp tin PHP:

  • Chuyển đổi yêu cầu thành một đối tượng, 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 với các dữ liệu yêu cầu.
  • Thêm mảng vào một đối tượng và trả lại đối tượng là JSON bằng cách sử dụng hàm json_encode().

Vòng lặp thông qua 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 trường hợp này là một mảng JavaScript. Sử dụng JSON.parse() để chuyển đổi JSON thành một đố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;
    }
};
...

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 sử dụng phương thức POST, chỉ định phương thức và phần header chính xác. Các dữ liệu được gửi đến máy chủ phải là một đối số cho phương thức .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", "json_demo_db_post.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("x=" + dbParam);

Sự khác biệt duy nhất trong tệp PHP là phương thức để nhận dữ liệu được truyền. 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);
?>