JSON PHP
Powszechnym zastosowaniem JSON jest odczytywanie danych z serwera WWW i wyświetlanie danych na stronie internetowej.
W tym rozdziale dowiesz się, jak wymieniać dane JSON między klientem a serwerem PHP.
Plik PHP
PHP ma kilka wbudowanych funkcji do obsługi JSON.
Obiekty w PHP można przekonwertować na JSON za pomocą funkcji PHP json_encode() :
plik PHP
<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New
York";
$myJSON = json_encode($myObj);
echo $myJSON;
?>
Klient JavaScript
Oto JavaScript na kliencie, używający wywołania AJAX do żądania pliku PHP z powyższego przykładu:
Przykład
Użyj JSON.parse(), aby przekonwertować wynik na obiekt 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();
Tablica PHP
Tablice w PHP zostaną również przekonwertowane na JSON podczas korzystania z funkcji PHP json_encode() :
plik PHP
<?php
$myArr = array("John", "Mary", "Peter", "Sally");
$myJSON = json_encode($myArr);
echo $myJSON;
?>
Klient JavaScript
Oto JavaScript na kliencie, używający wywołania AJAX do żądania pliku PHP z powyższego przykładu tablicy:
Przykład
Użyj JSON.parse(), aby przekonwertować wynik na tablicę 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();
Baza danych PHP
PHP jest językiem programowania po stronie serwera i może być używany do uzyskiwania dostępu do bazy danych.
Wyobraź sobie, że masz bazę danych na swoim serwerze i chcesz wysłać do niej żądanie od klienta, w którym prosisz o 10 pierwszych wierszy w tabeli o nazwie „klienci”.
Na kliencie utwórz obiekt JSON opisujący liczbę wierszy, które chcesz zwrócić.
Zanim wyślesz żądanie do serwera, przekonwertuj obiekt JSON na ciąg znaków i wyślij go jako parametr do url strony PHP:
Przykład
Użyj JSON.stringify(), aby przekonwertować obiekt JavaScript na 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();
Przykład wyjaśniony:
- Zdefiniuj obiekt zawierający właściwość i wartość „limit”.
- Przekonwertuj obiekt na ciąg JSON.
- Wyślij żądanie do pliku PHP z ciągiem JSON jako parametrem.
- Poczekaj, aż żądanie wróci z wynikiem (jako JSON)
- Wyświetl wynik otrzymany z pliku PHP.
Spójrz na plik PHP:
plik 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);
?>
Wyjaśnienie pliku PHP:
- Przekształć żądanie w obiekt za pomocą funkcji PHP json_decode() .
- Uzyskaj dostęp do bazy danych i wypełnij tablicę żądanymi danymi.
- Dodaj tablicę do obiektu i zwróć obiekt w formacie JSON za pomocą funkcji json_encode() .
Użyj danych
Przykład
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;
}
Metoda PHP = POST
Wysyłając dane na serwer często najlepiej jest skorzystać z POST
metody HTTP.
Aby wysyłać żądania AJAX przy użyciu POST
metody, określ metodę i poprawny nagłówek.
Dane wysyłane do serwera muszą być teraz argumentem send()
metody:
Przykład
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);
Jedyną różnicą w pliku PHP jest metoda pobierania przesłanych danych.
plik PHP
Użyj $_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");
$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);
?>