PHP JSON
- Página Anterior Servidor JSON
- Próxima Página HTML 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; ?>
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();
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; ?>
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();
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();
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; }); }); ...
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);
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); ?>
- Página Anterior Servidor JSON
- Próxima Página HTML JSON