PHP JSON

استفاده عادی JSON از خواندن داده‌ها از سرور وب و نمایش این داده‌ها در صفحه وب است.

این فصل به شما نشان می‌دهد که چگونه می‌توانید داده‌های JSON را بین سرور PHP و کلاینت رد و بدل کنید.

فایل‌های PHP

PHP تابع‌های داخلی برای پردازش JSON را فراهم می‌کند.

با استفاده از تابع PHP json_encode()،PHP می‌تواند اشیاء را به JSON تبدیل کند:

فایل‌های PHP

<?php
$myObj->name = \
$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

در استفاده از تابع 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:

  • درخواست را به شیء تبدیل کنید، از 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);
?>