JSON PHP
- หน้าก่อนหน้า JSON สีเซิร์ฟเวอร์
- หน้าต่อไป JSON HTML
JSON 的常规用途是从 web 服务器读取数据,然后在网页中显示这些数据。
本章向您讲解如何在客户端与 PHP 服务器之间交换 JSON 数据。
ไฟล์ PHP
PHP 提供处理 JSON 的内建函数。
通过使用 PHP 函数 json_encode()
,PHP 中的对象可转换为 JSON:
ไฟล์ PHP
<?php $myObj->name = "Bill Gates"; $myObj->age = 62; $myObj->city = "Seattle"; $myJSON = json_encode($myObj); echo $myJSON; ?>
JavaScript บนคลายงาน
นี่คือ JavaScript บนคลายงาน ที่ใช้ AJAX โปรแกรมเรียกเรียน PHP ไฟล์ในตัวอย่างข้างต้น:
ตัวอย่าง
ใช้ JSON.parse()
แปลงผลลัพธ์เป็น JavaScript Object:
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();
PHP Array
ในการใช้ฟังก์ชัน json_encode()
ในขณะนี้ ตัวแปร Array ใน PHP จะถูกแปลงเป็น JSON ด้วย:
ไฟล์ PHP
<?php $myArr = array("Bill Gates", "Steve Jobs", "Elon Musk"); $myJSON = json_encode($myArr); echo $myJSON; ?>
JavaScript บนคลายงาน
นี่คือ JavaScript บนคลายงาน ที่ใช้ AJAX โปรแกรมเรียกเรียน PHP ไฟล์ในตัวอย่างข้างต้น:
ตัวอย่าง
ใช้ JSON.parse()
แปลงผลลัพธ์เป็น JavaScript Array:
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();
PHP Database
PHP คือภาษาเขียนโปรแกรมที่ใช้บนเซิร์ฟเวอร์ ควรใช้สำหรับการกระทำที่เซิร์ฟเวอร์ควรทำเพียงเดียว อย่างเช่น การเข้าถึงฐานข้อมูล
จินตนาการว่าบนเซิร์ฟเวอร์มีฐานข้อมูลที่มีข้อมูลลูกค้า สินค้า และผู้จำหน่าย
ขณะนี้คุณต้องขอให้เซิร์ฟเวอร์เพื่อรับสิบบันทึกแรกในตาราง "ลูกค้า":
ตัวอย่าง
ใช้ JSON.stringify()
แปลง JavaScript Object ให้เป็น 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();
ตัวอย่างที่แสดง
- กำหนดวัตถุที่มีคุณสมบัติ table และ 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"); $result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit); $outp = array(); $outp = $result->fetch_all(MYSQLI_ASSOC); echo json_encode($outp); ?>
ชื่อไฟล์ PHP นี้
- แปลงคำขอเป็นองค์ประกอบ ด้วยฟังก์ชัน PHP
json_decode()
. - สืบหาฐานข้อมูล โดยใช้ข้อมูลที่ขอ
- เพิ่มตัวแปรเข้าสู่องค์ประกอบ ด้วย
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
ในการส่งข้อมูลไปยังเซิร์ฟเวอร์ มันถูกต้องที่จะใช้วิธี HTTP POST。
หากต้องการใช้วิธี POST ในการส่งคำขอ AJAX ให้ระบุวิธีนี้และหัวขอที่ถูกต้อง。
ข้อมูลที่ส่งไปยังเซิร์ฟเวอร์ต้องเป็น .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", "demo_json_db.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"); $result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit); $outp = array(); $outp = $result->fetch_all(MYSQLI_ASSOC); echo json_encode($outp); ?>
- หน้าก่อนหน้า JSON สีเซิร์ฟเวอร์
- หน้าต่อไป JSON HTML