PHP JSON
- Página anterior Servidor JSON
- Página siguiente HTML JSON
JSON 的常规用途是从 web 服务器读取数据,然后在网页中显示这些数据。
本章向您讲解如何在客户端与 PHP 服务器之间交换 JSON 数据。
Archivo PHP
PHP 提供处理 JSON 的内建函数。
通过使用 PHP 函数 json_encode()
,PHP 中的对象可转换为 JSON:
Archivo PHP
<?php $myObj->name = "Bill Gates"; $myObj->age = 62; $myObj->city = "Seattle"; $myJSON = json_encode($myObj); echo $myJSON; ?>
JavaScript en el cliente
Esto es JavaScript en el cliente, que utiliza llamadas AJAX para solicitar el archivo PHP del ejemplo anterior:
Ejemplo
usar JSON.parse()
Convertir los resultados en un objeto 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();
Array PHP
Al usar la función PHP json_encode()
en ese momento, el array en PHP también se convertirá a JSON:
Archivo PHP
<?php $myArr = array("Bill Gates", "Steve Jobs", "Elon Musk"); $myJSON = json_encode($myArr); echo $myJSON; ?>
JavaScript en el cliente
Esto es JavaScript en el cliente, que utiliza llamadas AJAX para solicitar el archivo PHP del ejemplo anterior:
Ejemplo
Utilice JSON.parse()
Convertir los resultados en un array 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();
Base de datos PHP
PHP es un lenguaje de programación de lado del servidor, que debe usarse para operaciones que solo pueden ser ejecutadas por el servidor, como acceder a bases de datos.
Imagínese que en el servidor hay una base de datos que contiene datos de clientes, productos y proveedores.
En este momento, necesita solicitar al servidor para obtener los primeros diez registros de la tabla "clientes":
Ejemplo
Utilice JSON.stringify()
Convertir un objeto JavaScript a 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();
Ejemplo de explicación:
- Definir un objeto que contiene las propiedades table y limit.
- Convertir este objeto en una cadena JSON.
- Enviar una solicitud a este archivo PHP, con JSON como parámetro.
- Esperar hasta que la solicitud devuelva un resultado (como JSON).
- Mostrar los resultados recibidos del archivo PHP.
Ver el archivo PHP
Archivo 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); ?>
Explicación del archivo PHP:
- Convertir la solicitud en objeto, usando la función PHP
json_decode()
. - Acceder a la base de datos, llenar el array con los datos solicitados.
- Agregar el array al objeto, usando
json_encode()
La función devuelve el objeto en JSON.
Recorrer los resultados
Convertir los resultados recibidos del archivo PHP en objeto JavaScript, o en este caso, un array JavaScript:
Ejemplo
usar JSON.parse()
Convertir JSON en objeto 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; }); }); ...
Método PHP = POST
Al enviar datos al servidor, es mejor usar el método HTTP POST.
Si desea enviar una solicitud AJAX utilizando el método POST, especifique este método y la cabecera correcta.
Los datos enviados al servidor deben ser en .send();
Parámetros del método:
Ejemplo
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);
La única diferencia en el archivo PHP es la forma en que se obtiene los datos transmitidos.
Archivo PHP
usar $_POST
en lugar de $_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); ?>
- Página anterior Servidor JSON
- Página siguiente HTML JSON