یکی از استفاده های رایج از فرمت Json خواندن اطلاعات از وب سرور پی اچ پی و سپس نمایش آن در صفحه وب سایت است. در این فصل با روش دریافت اطلاعات از یک سرور php آشنا خواهید شد. در این فصل یاد خواهید گرفت چطور داده های Json را بین کلاینت و سرور پی اچ پی جا به جا کنید


فایل PHP

php برای مدیریت Json شامل تعدادی تابع است. اشیا در پی اچ پی با استفاده از تابع ()json_encode میتوانند به فرمت Json تبدیل شوند :

<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";

$myJSON = json_encode($myObj);

echo $myJSON;
?>

خروجی نمونه مثال بالا به شکل زیر است :

{"name":"John","age":30,"city":"New York"}

درخواست از سمت کاربر با جاوا اسکریپت

اکنون میتوان با استفاده از درخواست Ajax در سمت کاربر به فایل PHP (که در مثال بالا نشان داده شده است) دسترسی پیدا کرد :

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        var myObj = JSON.parse(this.responseText);
        document.getElementById("demo").innerHTML = myObj.name;
    }
};
xmlhttp.open("GET", "demo_file.php", true);
xmlhttp.send();

در نمونه مثال فوق مقدار بازگشتی از سرور (فایل php) با استفاده از ()JSON.parse به یک شی جاوا اسکریپت تبدیل می شود. سپس می توان از آن استفاده نمود.


آرایه های PHP

آرایه ها در PHP می توانند به Json تبدیل شوند. برای این کار از تابع ()json_encode در PHP استفاده کنید :

<?php
$myArr = array("John", "Mary", "Peter", "Sally");

$myJSON = json_encode($myArr);

echo $myJSON;
?>

خروجی نمونه مثال بالا به شکل زیر خواهد بود :

["John","Mary","Peter","Sally"]

 


درخواست از سمت کاربر 

اکنون میتوان با استفاده از درخواست Ajax در سمت کاربر به فایل PHP ذکر شده در مثال قبل دسترسی داشت :

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        var myObj = JSON.parse(this.responseText);
        document.getElementById("demo").innerHTML = myObj[2];
    }
};
xmlhttp.open("GET", "demo_file_array.php", true);
xmlhttp.send();

در نمونه مثال فوق از متد ()JSON.parse برای تبدیل نتیجه به آرایه ای در جاوا اسکریپت استفاده شده است. سپس میتوان از آرایه استفاده کرد.


دیتابیس در PHP

پی اچ پی سک زبان برنامه نویسی سمت سرور است و باید از آن برای انجام عملیاتی که در سمت سرور انجام میشود ، استفاده نمود. برای مثال دسترسی به دیتابیس. فرض کنید شما در سمت سرور دیتابیسی دارید که شامل مشتری ها ، محصولات و تامین کنندگان است ، اکنون میخواهید درخواستی به سمت سرور بفرستید و 10 مشتری اول را از جدول "customers" واکشی کنید :

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", "json_demo_db.php?x=" + dbParam, true);
xmlhttp.send();

در نمونه مثال فوق از تابع ()JSON.stringify برای تبدیل اشیای جاوا اسکریپت به Json استفاده شده است.

توضیح مثال :

  • یک شی که شامل مشخصه های table و limit است، تعریف شده است.
  • شی به یک رشته ی Json تبدیل شده است.
  • درخواستی با رشته ای از Json به عنوان پارامتر به فایل PHP ارسال شده است.
  • بعد از ارسال درخواست ، پاسخ به شکل Json باز خواهد گشت.
  • در انتها کافی است از مقدار درخواستی برای نمایش استفاده کنیم.

به فایل PHP زیر نگاهی بیندازید :

<?php
header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_GET["x"], false);

$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$stmt = $conn->prepare("SELECT name FROM ? LIMIT ?");
$stmt->bind_param("ss", $obj->table, $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);

echo json_encode($outp);
?>

 توضیح فایل بالا :

  • در ابتدا درخواست با استفاده از متد ()json_decode در پی اچ پی به یک شی تبدیل می شود.
  • در مرحله ی دوم دسترسی به دیتابیس و پر کردن آرایه با داده های درخواستی انجام میشود.
  • در نهایت آرایه به یک شی ، اضافه شده و سپس شی با استفاده از متد ()json_encode به عنوان Json برگشت داده میشود.

پیمایش در نتیجه

در نمونه مثال زیر نتیجه ی بازگشتی از فایل PHP به شی جاوا اسکریپت تبدیل میشود (در این مورد به آرایه ای در جاوا اسکریپت) :

...
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;
    }
};
...

در نمونه مثال فوق برای تبدیل Json به شی ایی در جاوا اسکریپت از ()JSON.parse استفاده میشود.