PHP JSON
- Poprzednia strona Serwer JSON
- Następna strona HTML JSON
Zwykłe zastosowanie JSON to odczytywanie danych z serwera internetowego i wyświetlanie ich na stronie internetowej.
W tym rozdziale omówimy, jak wymieniać dane JSON między klientem a serwerem PHP.
pliku PHP
PHP oferuje wbudowane funkcje do obsługi JSON.
Przy użyciu funkcji PHP json_encode()
Obiekty w PHP mogą być przekształcane na JSON:
pliku PHP
<?php $myObj->nazwa = "Bill Gates"; $myObj->wiek = 62; $myObj->city = "Seattle"; $myJSON = json_encode($myObj); echo $myJSON; ?>
JavaScript klienta
To jest JavaScript klienta na serwerze, który używa wywołań AJAX do żądania PHP pliku z poprzedniego przykładu:
Przykład
używanie JSON.parse()
Przekształć wynik w obiekt JavaScript:
var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myObj = JSON.parse(this.responseText); document.getElementById("demo").innerHTML = myObj.name; }); }); xmlhttp.open("GET", "demo_file.php", true); xmlhttp.send();
PHP tablica
Podczas użycia funkcji PHP json_encode()
W tym przypadku, tablica w PHP zostanie również przekształcona w JSON:
pliku PHP
<?php $myArr = array("Bill Gates", "Steve Jobs", "Elon Musk"); $myJSON = json_encode($myArr); echo $myJSON; ?>
JavaScript klienta
To jest JavaScript klienta na serwerze, który używa wywołań AJAX do żądania PHP pliku z poprzedniego przykładu:
Przykład
Użyj JSON.parse()
Przekształć wynik w tablicę JavaScript:
var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myObj = JSON.parse(this.responseText); document.getElementById("demo").innerHTML = myObj[2]; }); }); xmlhttp.open("GET", "demo_file_array.php", true); xmlhttp.send();
PHP baza danych
PHP jest językiem programowania serwerowego, który powinien być używany do operacji wykonywanych tylko przez serwer, takich jak dostęp do bazy danych.
Wyobraź sobie, że na serwerze znajduje się baza danych, zawierająca dane klientów, produktów i dostawców.
W tym momencie musisz poprosić serwer o uzyskanie pierwszych dziesięciu rekordów z tabeli "Klient":
Przykład
Użyj JSON.stringify()
Przekształć obiekt JavaScript na JSON:
obj = { "table":"customers", "limit":10 }; dbParam = JSON.stringify(obj); xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHTML = this.responseText; }); }); xmlhttp.open("GET", "demo_json_db.php?x=" + dbParam, true); xmlhttp.send();
Przykład wyjaśnienia:
- Zdefiniuj obiekt zawierający atrybuty table i limit.
- Przekształć ten obiekt na ciąg JSON.
- Wysyłaj żądanie do tego pliku PHP, gdzie JSON jest parametrem.
- Czekaj, aż żądanie zwróci wynik (jako JSON).
- Wyświetl wynik otrzymany z pliku PHP.
Zobacz plik PHP
pliku PHP
<?php header("Content-Type: application/json; charset=UTF-8"); $obj = json_decode($_GET["x"], false); $conn = new mysqli("myServer", "myUser", "myPassword", "Northwind"); $result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit); $outp = array(); $outp = $result->fetch_all(MYSQLI_ASSOC); echo json_encode($outp); ?>
Wyjaśnienie pliku PHP:
- Przekształć żądanie na obiekt, używając funkcji PHP
json_decode()
. - Dostęp do bazy danych, wypełnij tablicę danymi żądanymi.
- Dodaj tablicę do obiektu, używając
json_encode()
Funkcja zwraca obiekt jako JSON.
Przejdź przez wynik
Przekształć wynik otrzymany z pliku PHP na obiekt JavaScript, lub w tym przypadku, tablicę JavaScript:
Przykład
używanie JSON.parse()
Przekształć JSON na obiekt JavaScript:
... xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myObj = JSON.parse(this.responseText); for (x in myObj) { txt += myObj[x].name + "<br>"; }); document.getElementById("demo").innerHTML = txt; }); }); ...
Metoda PHP = POST
Podczas wysyłania danych do serwera, lepiej jest zazwyczaj używać metody HTTP POST.
Aby użyć metody POST do wysyłania żądań AJAX, należy określić tę metodę i poprawne nagłówki.
Dane wysyłane do serwera muszą teraz być .send();
Parametry metody:
Przykład
obj = { "table":"customers", "limit":10 }; dbParam = JSON.stringify(obj); xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myObj = JSON.parse(this.responseText); for (x in myObj) { txt += myObj[x].name + "<br>"; }); document.getElementById("demo").innerHTML = txt; }); }); xmlhttp.open("POST", "demo_json_db.php", true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send("x=" + dbParam);
Jedyną różnicą w pliku PHP jest sposób uzyskiwania przesyłanych danych.
pliku PHP
używanie $_POST
zamiast $_GET
:
<?php header("Content-Type: application/json; charset=UTF-8"); $obj = json_decode($_POST["x"], false); $conn = new mysqli("myServer", "myUser", "myPassword", "Northwind"); $result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit); $outp = array(); $outp = $result->fetch_all(MYSQLI_ASSOC); echo json_encode($outp); ?>
- Poprzednia strona Serwer JSON
- Następna strona HTML JSON