JSONP là một phương pháp để gửi dữ liệu JSON mà không cần lo lắng về các vấn đề tên miền chéo.
JSONP không sử dụng XMLHttpRequestđối tượng.
JSONP sử dụng <script>thẻ để thay thế.
JSONP là viết tắt của JSON with Padding.
Yêu cầu tệp từ miền khác có thể gây ra sự cố do chính sách miền chéo.
Yêu cầu tập lệnh bên ngoài từ một miền khác không có vấn đề này.
JSONP sử dụng lợi thế này và yêu cầu tệp bằng thẻ script thay vì XMLHttpRequestđối tượng.<script src=”demo_jsonp.php”>
Tệp trên máy chủ bao bọc kết quả bên trong một lệnh gọi hàm:
<?php $myJSON = '{ "name":"John", "age":30, "city":"New York" }'; echo "myFunc(".$myJSON.");"; ?> Kết quả trả về một cuộc gọi đến một hàm có tên “myFunc” với dữ liệu JSON làm tham số.
Đảm bảo rằng chức năng tồn tại trên máy khách.
Hàm có tên “myFunc” nằm trên máy khách và sẵn sàng xử lý dữ liệu JSON:
function myFunc(myObj) {
document.getElementById("demo").innerHTML = myObj.name; Ví dụ trên sẽ thực thi chức năng “myFunc” khi trang đang tải, dựa trên vị trí bạn đặt thẻ script, điều này không hài lòng lắm.
Thẻ script chỉ nên được tạo khi cần:
Tạo và chèn thẻ <script> khi một nút được nhấp:
function clickButton() {
let s = document.createElement("script");
s.src = "demo_jsonp.php";
document.body.appendChild(s);
} Các ví dụ trên vẫn rất tĩnh.
Làm cho ví dụ động bằng cách gửi JSON đến tệp php và để tệp php trả về một đối tượng JSON dựa trên thông tin mà nó nhận được.
<?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 "myFunc(".json_encode($outp).")"; ?> Hàm “myFunc” sẽ được gọi từ tệp php:
const obj = { table: "products", limit: 10 };
let s = document.createElement("script");
s.src = "jsonp_demo_db.php?x=" + JSON.stringify(obj);
document.body.appendChild(s);
function myFunc(myObj) {
let txt = "";
for (let x in myObj) {
txt += myObj[x].name + "<br>";
}
document.getElementById("demo").innerHTML = txt;
} Khi bạn không có quyền kiểm soát tệp máy chủ, làm cách nào để tệp máy chủ gọi đúng chức năng?
Đôi khi tệp máy chủ cung cấp hàm gọi lại dưới dạng tham số:
Tệp php sẽ gọi hàm bạn truyền dưới dạng tham số gọi lại:let s = document.createElement(“script”);
s.src = “jsonp_demo_db.php?callback=myDisplayFunction“;
document.body.appendChild(s);
Hãy tự mình thử »
Lượt xem : 291
This is excellent news!
Haven't seen the build yet, I'll look now.
Checking the build now