PHP JSON
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:
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
عند استخدام دالة PHP json_encode()
عندما يتم تحويل المجموعة في 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:
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
PHP هو لغة برمجة الجانب الخادم، ويجب استخدامه لعمليات يمكن تنفيذها فقط على الخادم، مثل الوصول إلى قاعدة البيانات.
تخيل أن هناك قاعدة بيانات على الخادم تحتوي على بيانات العملاء والمنتجات والموردين.
في هذه اللحظة، تحتاج إلى طلب الخدمة من الخادم للحصول على عشر سجلات من جدول "المستهلكين":
النموذج
استخدم JSON.stringify()
تحويل جسم JavaScript إلى 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()
الوظيفة تعود بالعنصر كـ JSON.
استكشاف النتائج
تحويل النتائج المستلمة من ملف 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 عادة.
لإرسال طلب AJAX باستخدام طريقة POST، يرجى تحديد هذه الطريقة والرأس الصحيح.
البيانات التي يتم إرسالها إلى الخادم يجب أن تكون .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); ؟؟>