PHP در JSON
یکی از استفادههای رایج JSON خواندن اطلاعات از یک وب سرور و نمایش اطلاعات در یک صفحه وب است. [۱]
این فصل به شما نحوه تبادل داده بین یک کاربر و یک سرور PHP را میآموزد.
فایل PHP
PHP دارای تعدادی تابع تعبیه شده یا پیشفرض برای مدیریت JSON است.
اشیاء در PHP میتوانند با استفاده از تابع json_encode()
به JSON تبدیل شوند:
PHP file
1 <?php
2 $myObj->name = "John";
3 $myObj->age = 30;
4 $myObj->city = "New York";
5
6 $myJSON = json_encode($myObj);
7
8 echo $myJSON;
9 ?>
کاربر جاوا اسکریپت
در اینجا کد جاوا اسکریپتی که کاربر به وسیله آن با استفاده از یک درخواست AJAX، فایل PHP را از مثال بالا درخواست میکند وجود دارد:
مثال
از متد JSON.parse()
برای تبدیل نتیجه به یک شیء جاوا اسکریپت استفاده کنید:
1 var xmlhttp = new XMLHttpRequest();
2 xmlhttp.onreadystatechange = function() {
3 if (this.readyState == 4 && this.status == 200) {
4 var myObj = JSON.parse(this.responseText);
5 document.getElementById("demo").innerHTML = myObj.name;
6 }
7 };
8 xmlhttp.open("GET", "demo_file.php", true);
9 xmlhttp.send();
آرایه در PHP
آرایهها در زبان PHP به هنگام استفاده از تابع json_encode()
به JSON تبدیل میشوند:
PHP file
1 <?php
2 $myArr = array("John", "Mary", "Peter", "Sally");
3
4 $myJSON = json_encode($myArr);
5
6 echo $myJSON;
7 ?>
جاوا اسکریپت کاربر
در اینجا کد جاوا اسکریپتی که کاربر به وسیلهٔ آن و به وسیله یک درخواست AJAX یک فایل PHP را از مثال آرایه بالا درخواست میکند را مشاهده میکنید:
مثال
از متد JSON.parse()
برای تبدیل نتیجه به یک آرایه در جاوا اسکریپت استفاده کنید:
1 var xmlhttp = new XMLHttpRequest();
2 xmlhttp.onreadystatechange = function() {
3 if (this.readyState == 4 && this.status == 200) {
4 var myObj = JSON.parse(this.responseText);
5 document.getElementById("demo").innerHTML = myObj[2];
6 }
7 };
8 xmlhttp.open("GET", "demo_file_array.php", true);
9 xmlhttp.send();
پایگاه داده در PHP
PHP یک زبان برنامهنویسی سمت سرور است و میبایست تنها برای اعمالی که میبایست توسط سرور صورت بگیرند، مانند دسترسی به پایگاه داده، استفاده شود.
تصور کنید که شما پایگاه دادهای روی سرور دارید که شامل مشتریها، محصولات و تولیدکنندگان میشود.
شما میخواهید درخواستی ایجاد کنید که از سرور شما ۱۰ رکورد اول جدول «مشتریان» را دریافت کند:
مثال
از متد JSON.stringify()
برای تبدیل شیء جاوا اسکریپت به JSON استفاده کنید:
1 obj = { "table":"customers", "limit":10 };
2 dbParam = JSON.stringify(obj);
3 xmlhttp = new XMLHttpRequest();
4 xmlhttp.onreadystatechange = function() {
5 if (this.readyState == 4 && this.status == 200) {
6 document.getElementById("demo").innerHTML = this.responseText;
7 }
8 };
9 xmlhttp.open("GET", "json_demo_db.php?x=" + dbParam, true);
10 xmlhttp.send();
توضیح مثال:
- یک شیء تعریف میکند که شامل یک ویژگی جدول (به انگلیسی: table) و یک ویژگی محدودیت (به انگلیسی: limit) است
- شیء را به یک رشته متنی JSON تبدیل میکند
- درخواست را به همراه رشته متنی JSON به عنوان پارامتر، به فایل PHP روی سرور ارسال میکند
- تا زمانی که درخواست نتیجه را (به صورت JSON) برگرداند، صبر میکند
- نتیجه دریافت شده از فایل PHP را دریافت میکند.
بزارید نگاهی به فایل PHP بیندازیم:
PHP file
1 <?php
2 header("Content-Type: application/json; charset=UTF-8");
3 $obj = json_decode($_GET["x"], false);
4
5 $conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
6 $stmt = $conn->prepare("SELECT name FROM ? LIMIT ?");
7 $stmt->bind_param("ss", $obj->table, $obj->limit);
8 $stmt->execute();
9 $result = $stmt->get_result();
10 $outp = $result->fetch_all(MYSQLI_ASSOC);
11
12 echo json_encode($outp);
13 ?>
توضیح مثال PHP:
درخواست را با استفاده از متد json_decode()
به یک شیء تبدیل میکند.
به پایگاه داده دسترسی پیدا کرده و یک آرایه را با اطلاعات درخواستی پر میکند.
آرایه را به شیء اضافه کرده و شیء را به صورت یک JSON با استفاده از متد json_encode()
برمیگرداند.
ایجاد حلقه درون نتیجه
نتیجه دریافت شده از فایل PHP را به یک شیء جاوا اسکریپت، یا در این مثال، به یک آرایه جاوا اسکریپت تبدیل میکند:
مثال
از متد JSON.parse()
برای تبدیل JSON به یک شیء JavaScript استفاده کنید:
1 ...
2 xmlhttp.onreadystatechange = function() {
3 if (this.readyState == 4 && this.status == 200) {
4 myObj = JSON.parse(this.responseText);
5 for (x in myObj) {
6 txt += myObj[x].name + "<br>";
7 }
8 document.getElementById("demo").innerHTML = txt;
9 }
10 };
11 ...
متد PHP برابر با POST است
هنگام ارسال داده به سرور، اغلب بهترین روش استفاده از روش اچتیتیپی POST
است.
برای ارسال یک درخواست AJAX به سرور با استفاده از روش POST
میبایست متد را مشخص کرده و سپس Header را نیز مشخص کنید.
دادهای که میبایست به سمت سرور ارسال شود، باید به عنوان یک آرگومان به متد send()
پاس داده شود:
مثال
1 obj = { "table":"customers", "limit":10 };
2 dbParam = JSON.stringify(obj);
3 xmlhttp = new XMLHttpRequest();
4 xmlhttp.onreadystatechange = function() {
5 if (this.readyState == 4 && this.status == 200) {
6 myObj = JSON.parse(this.responseText);
7 for (x in myObj) {
8 txt += myObj[x].name + "<br>";
9 }
10 document.getElementById("demo").innerHTML = txt;
11 }
12 };
13 xmlhttp.open("POST", "json_demo_db_post.php", true);
14 xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
15 xmlhttp.send("x=" + dbParam);
تنها تفاوت در فایل PHP روش دریافت دادههای منتقل شده، است.
PHP file
از $_POST به جای $_GET استفاده کنید:
1 <?php
2 header("Content-Type: application/json; charset=UTF-8");
3 $obj = json_decode($_POST["x"], false);
4
5 $conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
6 $stmt = $conn->prepare("SELECT name FROM ? LIMIT ?");
7 $stmt->bind_param("ss", $obj->table, $obj->limit);
8 $stmt->execute();
9 $result = $stmt->get_result();
10 $outp = $result->fetch_all(MYSQLI_ASSOC);
11
12 echo json_encode($outp);
13 ?>
منابع آموزشی