JSON PHP
Un uso comune di JSON è leggere i dati da un server Web e visualizzare i dati in una pagina Web.
Questo capitolo ti insegnerà come scambiare dati JSON tra il client e un server PHP.
Il file PHP
PHP ha alcune funzioni integrate per gestire JSON.
Gli oggetti in PHP possono essere convertiti in JSON utilizzando la funzione PHP json_encode() :
File PHP
<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New
York";
$myJSON = json_encode($myObj);
echo $myJSON;
?>
Il client JavaScript
Ecco un JavaScript sul client, che utilizza una chiamata AJAX per richiedere il file PHP dall'esempio sopra:
Esempio
Usa JSON.parse() per convertire il risultato in un oggetto JavaScript:
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();
matrice PHP
Gli array in PHP verranno anche convertiti in JSON quando si utilizza la funzione PHP json_encode() :
File PHP
<?php
$myArr = array("John", "Mary", "Peter", "Sally");
$myJSON = json_encode($myArr);
echo $myJSON;
?>
Il client JavaScript
Ecco un JavaScript sul client, che utilizza una chiamata AJAX per richiedere il file PHP dall'esempio di array sopra:
Esempio
Usa JSON.parse() per convertire il risultato in un array JavaScript:
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();
Database PHP
PHP è un linguaggio di programmazione lato server e può essere utilizzato per accedere a un database.
Immagina di avere un database sul tuo server e di volergli inviare una richiesta dal client a cui chiedi le prime 10 righe in una tabella chiamata "clienti".
Sul client, crea un oggetto JSON che descriva il numero di righe che desideri restituire.
Prima di inviare la richiesta al server, converti l'oggetto JSON in una stringa e invialo come parametro all'URL della pagina PHP:
Esempio
Usa JSON.stringify() per convertire l'oggetto JavaScript in JSON:
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();
Esempio spiegato:
- Definire un oggetto contenente una proprietà e un valore "limite".
- Converti l'oggetto in una stringa JSON.
- Invia una richiesta al file PHP, con la stringa JSON come parametro.
- Attendi fino a quando la richiesta non ritorna con il risultato (come JSON)
- Visualizza il risultato ricevuto dal file PHP.
Dai un'occhiata al file PHP:
File 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);
?>
File PHP spiegato:
- Converti la richiesta in un oggetto, usando la funzione PHP json_decode() .
- Accedi al database e riempi un array con i dati richiesti.
- Aggiungi l'array a un oggetto e restituisci l'oggetto come JSON utilizzando la funzione json_encode() .
Usa i dati
Esempio
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;
}
Metodo PHP = POST
Quando si inviano dati al server, spesso è meglio utilizzare il POST
metodo HTTP.
Per inviare richieste AJAX utilizzando il POST
metodo, specificare il metodo e l'intestazione corretta.
I dati inviati al server devono ora essere un argomento per il send()
metodo:
Esempio
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);
L'unica differenza nel file PHP è il metodo per ottenere i dati trasferiti.
File PHP
Usa $_POST invece di $_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);
?>