استفاده معمول از JSON خواندن داده ها از یک وب سرور و نمایش داده ها در یک صفحه وب است.
در این فصل نحوه تبادل داده های JSON بین سرویس گیرنده و سرور PHP به شما آموزش داده می شود.
فایل PHP
PHP توابع داخلی برای مدیریت JSON دارد.
اشیا in موجود در PHP با استفاده از عملکرد PHP json_encode () به JSON تبدیل می شوند :
پرونده PHP
<?php $myObj->name = "John"; $myObj->age = 30; $myObj->city = "New York"; $myJSON = json_encode($myObj); echo $myJSON; ?>
مشتری جاوا اسکریپت
در اینجا با استفاده از تماس AJAX برای درخواست فایل PHP از مثال بالا ، یک JavaScript روی مشتری وجود دارد:
مثال
برای تبدیل نتیجه به یک شی JavaScript از () JSON.parse استفاده کنید:
const xmlhttp = new XMLHttpRequest(); xmlhttp.onload = function() { const myObj = JSON.parse(this.responseText); document.getElementById("demo").innerHTML = myObj.name; } xmlhttp.open("GET", "demo_file.php"); xmlhttp.send();
آرایه PHP
آرایه های موجود در PHP نیز هنگام استفاده از عملکرد PHP json_encode () به JSON تبدیل می شوند :
پرونده PHP
<?php $myArr = array("John", "Mary", "Peter", "Sally"); $myJSON = json_encode($myArr); echo $myJSON; ?>
مشتری جاوا اسکریپت
در اینجا یک JavaScript روی مشتری وجود دارد که با استفاده از یک تماس AJAX درخواست فایل PHP از مثال آرایه بالا را می دهد:
مثال
برای تبدیل نتیجه به آرایه جاوا اسکریپت از () JSON.parse استفاده کنید:
var xmlhttp = new XMLHttpRequest(); xmlhttp.onload = function() { const myObj = JSON.parse(this.responseText); document.getElementById("demo").innerHTML = myObj[2]; } xmlhttp.open("GET", "demo_file_array.php", true); xmlhttp.send();
پایگاه داده PHP
PHP یک زبان برنامه نویسی سمت سرور است و می توان از آن برای دسترسی به پایگاه داده استفاده کرد.
تصور کنید که یک پایگاه داده بر روی سرور خود دارید ، و می خواهید از مشتری که 10 ردیف اول جدول را به نام “مشتری” درخواست می کنید ، از آن درخواست کنید.
در مشتری ، یک شی JSON ایجاد کنید که تعداد ردیف هایی را که می خواهید برگردانید توصیف کند.
قبل از اینکه درخواست را به سرور ارسال کنید ، شی JSON را به یک رشته تبدیل کنید و آن را به عنوان یک پارامتر به آدرس صفحه PHP ارسال کنید:
مثال
برای تبدیل شی JavaScript به JSON از () JSON.stringify استفاده کنید:
const limit = {"limit":10}; const dbParam = JSON.stringify(limit); xmlhttp = new XMLHttpRequest(); xmlhttp.onload = function() { document.getElementById("demo").innerHTML = this.responseText; } xmlhttp.open("GET","json_demo_db.php?x=" + dbParam); xmlhttp.send();
مثال توضیح داده شده:
- یک شی containing حاوی ویژگی و مقدار “حد” را تعریف کنید.
- تبدیل شی به رشته JSON.
- با استفاده از رشته JSON به عنوان یک پارامتر ، یک درخواست به فایل PHP ارسال کنید.
- صبر کنید تا درخواست با نتیجه برگردد (به عنوان 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"); $stmt = $conn->prepare("SELECT name FROM customers LIMIT ?"); $stmt->bind_param("s", $obj->limit); $stmt->execute(); $result = $stmt->get_result(); $outp = $result->fetch_all(MYSQLI_ASSOC); echo json_encode($outp); ?>
فایل PHP توضیح داد:
- با استفاده از تابع PHP json_decode () درخواست را به یک شی تبدیل کنید .
- به پایگاه داده دسترسی پیدا کنید و یک آرایه را با داده های درخواستی پر کنید.
- آرایه را به یک شی اضافه کرده و با استفاده از تابع json_encode () شی را به صورت JSON برگردانید .
از داده استفاده کنید
مثال
xmlhttp.onload = function() { const myObj = JSON.parse(this.responseText); let text = ""; for (let x in myObj) { text += myObj[x].name + "<br>"; } document.getElementById("demo").innerHTML = text; }
روش PHP = POST
هنگام ارسال داده به سرور ، معمولاً بهتر است از POST
روش HTTP استفاده کنید.
برای ارسال درخواست های AJAX با استفاده از POST
روش ، روش و عنوان صحیح را مشخص کنید.
داده های ارسالی به سرور اکنون باید آرگومان send()
روش باشد:
مثال
const dbParam = JSON.stringify({"limit":10}); const xmlhttp = new XMLHttpRequest(); xmlhttp.onload = function() { const myObj = JSON.parse(this.responseText); let text =""; for (let x in myObj) { text += myObj[x].name + "<br>"; } document.getElementById("demo").innerHTML = text; } xmlhttp.open("POST", "json_demo_db_post.php"); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send("x=" + dbParam);
تنها تفاوت در پرونده PHP روش بدست آوردن داده های منتقل شده است.
پرونده PHP
به جای $ _GET از $ _POST استفاده کنید:
<?php header("Content-Type: application/json; charset=UTF-8"); $obj = json_decode($_POST["x"], false); $conn = new mysqli("myServer", "myUser", "myPassword", "Northwind"); $stmt = $conn->prepare("SELECT name FROM customers LIMIT ?"); $stmt->bind_param("s", $obj->limit); $stmt->execute(); $result = $stmt->get_result(); $outp = $result->fetch_all(MYSQLI_ASSOC); echo json_encode($outp); ?>