PHP در JSON

از ویکی‌کد، دانشنامهٔ برنامه‌نویسی
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
تعریف شیء در جاوا اسکریپت
تابع در جاوا اسکریپت
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
۱مقدمه
۲شیوهٔ نوشتار
۳JSON در برابر XML
۴داده‌های مجاز
۵متد JSON Parse
۶متد JSON Stringify
۷اشیاء
۸آرایه‌ها
۹PHP در JSON
۱۰HTML در JSON
۱۱JSONP
جی‌کوئری در برابر جاوا اسکریپت
مثال‌های جاوا اسکریپت
مرجع جاوا اسکریپت

یکی از استفاده‌های رایج 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 ?>


منابع آموزشی