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():
<?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:
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()
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 voler inviare una richiesta dal client in cui chiedi le prime 10 righe in una tabella chiamata “clienti”.
Sul client, crea un oggetto JSON che descriva i numeri 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
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();
Utilizza JSON.stringify() per convertire l’oggetto JavaScript in JSON:
<?php $myArr = array("John", "Mary", "Peter", "Sally"); $myJSON = json_encode($myArr); echo $myJSON; ?>
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 ritorna con il risultato (come JSON)
- Visualizza il risultato ricevuto dal file PHP.
Dai un’occhiata al file PHP
<span class="phpcolor"><span class="phptagcolor"><?php</span> header(<span class="phpstringcolor">"Content-Type: application/json; charset=UTF-8"</span>); $obj = json_decode(<span class="phpglobalcolor">$_GET</span>[<span class="phpstringcolor">"x"</span>], false); $conn = <span class="phpkeywordcolor">new</span> mysqli(<span class="phpstringcolor">"myServer"</span>, <span class="phpstringcolor">"myUser"</span>, <span class="phpstringcolor">"myPassword"</span>, <span class="phpstringcolor">"Northwind"</span>); $stmt = $conn->prepare(<span class="phpstringcolor">"SELECT name FROM customers LIMIT ?"</span>); $stmt->bind_param(<span class="phpstringcolor">"s"</span>, $obj->limit); $stmt->execute(); $result = $stmt->get_result(); $outp = $result->fetch_all(MYSQLI_ASSOC); <span class="phpkeywordcolor">echo</span> json_encode($outp); <span class="phptagcolor">?></span></span>
File PHP spiegato:
Converti la richiesta in un oggetto, utilizzando 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
<span class="jscolor">xmlhttp.<span class="jspropertycolor">onload</span> = <span class="jskeywordcolor">function</span>() { <span class="jskeywordcolor">const</span> myObj = JSON.<span class="jspropertycolor">parse</span>(<span class="jskeywordcolor">this</span>.<span class="jspropertycolor">responseText</span>); <span class="jskeywordcolor">let</span> text = <span class="jsstringcolor">""</span>; <span class="jskeywordcolor">for</span> (<span class="jskeywordcolor">let</span> x <span class="jskeywordcolor">in</span> myObj) { text += myObj[x].<span class="jspropertycolor">name</span> + <span class="jsstringcolor">"<br>"</span>; } document.<span class="jspropertycolor">getElementById</span>(<span class="jsstringcolor">"demo"</span>).<span class="jspropertycolor">innerHTML</span> = text; }</span>
Metodo PHP = POST
Quando si inviano dati al server, spesso è meglio utilizzare il metodo HTTP POST.
Per inviare richieste AJAX utilizzando il metodo POST, specificare il metodo e l’intestazione corretta.
I dati inviati al server devono ora essere un argomento per il metodo 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 + ”
“;
}
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);
[/javascrit]
L’unica differenza nel file PHP è il metodo per ottenere i dati trasferiti.
File PHP
Utilizza $_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); ?>