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;
؟؟>

عرض ملف PHP

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;
؟؟>

عرض ملف PHP

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);
؟؟>