PHP JSON

O uso comum do JSON é ler dados do servidor web e exibi-los na página web.

Este capítulo explica como trocar dados JSON entre o cliente e o servidor PHP.

Arquivo PHP

O PHP oferece funções integradas para manipulação de JSON.

Usando a função PHP json_encode(),O objeto PHP pode ser convertido para JSON:

Arquivo PHP

<?php
$myObj->name = "Bill Gates";
$myObj->age = 62;
$myObj->city = "Seattle";
$myJSON = json_encode($myObj);
echo $myJSON;
?>

Exibir arquivo PHP

JavaScript do lado do cliente

Este é o JavaScript do lado do cliente, que usa chamadas AJAX para solicitar o arquivo PHP do exemplo anterior:

Exemplo

Usar JSON.parse() Converter o resultado para um 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();

Experimente pessoalmente

Array PHP

ao usar a função PHP json_encode() neste momento, o array também será convertido para JSON no PHP:

Arquivo PHP

<?php
$myArr = array("Bill Gates", "Steve Jobs", "Elon Musk");
$myJSON = json_encode($myArr);
echo $myJSON;
?>

Exibir arquivo PHP

JavaScript do lado do cliente

Este é o JavaScript do lado do cliente, que usa chamadas AJAX para solicitar o arquivo PHP do exemplo anterior:

Exemplo

Use JSON.parse() Converter o resultado para um 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();

Experimente pessoalmente

Banco de dados PHP

PHP é um linguagem de programação do lado do servidor, deve ser usada para operações que só podem ser executadas pelo servidor, como acessar o banco de dados.

Imaginemos que haja um banco de dados no servidor, contendo dados de clientes, produtos e fornecedores.

Neste momento, você precisa fazer uma solicitação ao servidor para obter os primeiros dez registros da tabela "client":

Exemplo

Use JSON.stringify() Converter um objeto JavaScript para 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();

Experimente pessoalmente

Exemplo de explicação:

  • Definir um objeto que contenha os atributos "table" e "limit".
  • Converta este objeto em uma string JSON.
  • Envie uma solicitação para este arquivo PHP, com JSON como parâmetro.
  • Aguarde até que a solicitação retorne o resultado (como JSON).
  • Exiba o resultado recebido do arquivo PHP.

Ver arquivo PHP

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

Explicação do arquivo PHP:

  • Converta a solicitação em objeto, usando a função PHP json_decode().
  • Acesse o banco de dados, preencha o array com os dados solicitados.
  • Adicione o array ao objeto usando json_encode() A função retorna o objeto como JSON.

Percorrer os resultados

Converta o resultado recebido do arquivo PHP em objeto JavaScript, ou em um array JavaScript neste exemplo:

Exemplo

Usar JSON.parse() Converta JSON em 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;
    });
});
 ...

Experimente pessoalmente

Método PHP = POST

É melhor usar o método HTTP POST ao enviar dados para o servidor.

Para usar o método POST para enviar uma solicitação AJAX, especifique este método e o cabeçalho correto.

Os dados enviados para o servidor devem ser .send(); Parâmetros do método:

Exemplo

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

Experimente pessoalmente

A única diferença no arquivo PHP é a maneira de obter os dados transmitidos.

Arquivo PHP

Usar $_POST em vez 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);
?>