JSON PHP
'n Algemene gebruik van JSON is om data vanaf 'n webbediener te lees en die data op 'n webblad te vertoon.
Hierdie hoofstuk sal jou leer hoe om JSON-data tussen die kliënt en 'n PHP-bediener uit te ruil.
Die PHP-lêer
PHP het 'n paar ingeboude funksies om JSON te hanteer.
Voorwerpe in PHP kan in JSON omgeskakel word deur die PHP-funksie json_encode() te gebruik :
PHP lêer
<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New
York";
$myJSON = json_encode($myObj);
echo $myJSON;
?>
Die kliënt JavaScript
Hier is 'n JavaScript op die kliënt wat 'n AJAX-oproep gebruik om die PHP-lêer van die voorbeeld hierbo aan te vra:
Voorbeeld
Gebruik JSON.parse() om die resultaat in 'n JavaScript-objek om te skakel:
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 Skikking
Skikkings in PHP sal ook omgeskakel word na JSON wanneer die PHP-funksie json_encode() gebruik word :
PHP lêer
<?php
$myArr = array("John", "Mary", "Peter", "Sally");
$myJSON = json_encode($myArr);
echo $myJSON;
?>
Die kliënt JavaScript
Hier is 'n JavaScript op die kliënt wat 'n AJAX-oproep gebruik om die PHP-lêer van die skikkingsvoorbeeld hierbo aan te vra:
Voorbeeld
Gebruik JSON.parse() om die resultaat in 'n JavaScript-skikking om te skakel:
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-databasis
PHP is 'n bedienerkant-programmeertaal en kan gebruik word om toegang tot 'n databasis te verkry.
Stel jou voor dat jy 'n databasis op jou bediener het, en jy wil 'n versoek daarheen stuur vanaf die kliënt waar jy vra vir die 10 eerste rye in 'n tabel genaamd "kliënte".
Op die kliënt, maak 'n JSON-voorwerp wat die aantal rye beskryf wat jy wil terugstuur.
Voordat jy die versoek na die bediener stuur, omskep die JSON-voorwerp in 'n string en stuur dit as 'n parameter na die url van die PHP-bladsy:
Voorbeeld
Gebruik JSON.stringify() om die JavaScript-objek in JSON om te skakel:
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();
Voorbeeld verduidelik:
- Definieer 'n objek wat 'n "limiet" eienskap en waarde bevat.
- Skakel die voorwerp om in 'n JSON-string.
- Stuur 'n versoek na die PHP-lêer, met die JSON-string as 'n parameter.
- Wag totdat die versoek terugkeer met die resultaat (as JSON)
- Vertoon die resultaat wat van die PHP-lêer ontvang is.
Kyk na die PHP-lêer:
PHP lêer
<?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-lêer verduidelik:
- Skakel die versoek om in 'n objek deur die PHP-funksie json_decode() .
- Toegang tot die databasis, en vul 'n skikking met die gevraagde data.
- Voeg die skikking by 'n voorwerp en gee die voorwerp terug as JSON deur die json_encode() funksie te gebruik.
Gebruik die data
Voorbeeld
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 metode = POST
Wanneer data na die bediener gestuur word, is dit dikwels die beste om die HTTP POST
-metode te gebruik.
Om AJAX-versoeke met die POST
metode te stuur, spesifiseer die metode en die korrekte kopskrif.
Die data wat na die bediener gestuur word, moet nou 'n argument vir die send()
metode wees:
Voorbeeld
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);
Die enigste verskil in die PHP-lêer is die metode om die oorgedra data te kry.
PHP lêer
Gebruik $_POST in plaas van $_GET:
<?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);
?>