PHP 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;
?>

Mostrar archivo PHP

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();

Prueba personalmente

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;
?>

Mostrar archivo PHP

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();

Prueba personalmente

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();

Prueba personalmente

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;
    });
});
 ...

Prueba personalmente

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);

Prueba personalmente

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);
?>