The JSON notation is quite similar to that of an object in Javascript, except for a few differences:
Javascript object:
[
{
"bloco":"bloco1", // Uso de aspas duplas
'titulo': "titulo1", // aspas simples é
perguntas: [{ // opcional
pergunta1: "Resposta1",
opcaoSelecionada: 2 // Valores numéricos são permitido
}], // Não se usa ; no final de um elemento nem para separar-los
callback: function(){ alert('Hello World!'); }
}
]
An object notation in Javascript is very flexible and simple. You can still add other elements after creating the object:
objeto[ 'chave' ] = 'Valor';
objeto[ 'outra' ] = {name: 'Objeto Filho', value: 'Outro valor' };
JSON:
[
{
"bloco":"bloco1", // Uso de aspas duplas é obrigatório
"titulo": "titulo1", // aspas simples não é permitido
"perguntas": [{
"pergunta1": "Resposta1",
"opcaoSelecionada": 2 // Valores numéricos são permitido
}] // Não se usa ; no final de um elemento nem para separar-los
// Não é permitido funções
}
]
You can send your data as an object by $.ajax
, and receive them as form fields in PHP
var dados = [
{
bloco: "bloco1", titulo: "titulo1", perguntas: [
{pergunta: "Pergunta1", opcao: 2},
{pergunta: "Pergunta2", opcao: 1},
{pergunta: "Pergunta3", opcao: 4}
]
}
]
$.ajax({
url: '/path/to/file',
type: 'POST',
dataType: 'json',
data: {blocos: dados},
success: function(data){
alert(data.msg);
},
error: console.log
});
In PHP you can receive the data as POST variables, as reported in the property type
of ajax
:
$blocos = (!empty($_POST['blocos']) ? $_POST['blocos'] : NULL);
$msg = '';
foreach ($blocos as $bloco) {
$msg .= "Bloco: $bloco['bloco'] <br>\n".
"Título: $bloco['titulo'] <br>\n";
foreach ($bloco['perguntas'] as $pergunta) {
$msg .= "Pergunta: $pergunta['pergunta'] <br>\n".
"Resposta: $pergunta['opcao'] <br>\n";
}
$msg .= "<br>\n<br>\n";
}
header('Content-Type: application/json');
echo json_encode(
Array(
'msg' => $msg
)
);
exit;
You can also send the data as a string and decode it as the function json_decode
:
$.ajax({
url: '/path/to/file',
type: 'POST',
dataType: 'json',
data: {blocos: JSON.stringify(dados)},
success: function(data){
alert(data.msg);
},
error: console.log
});
When the object is sent directly in the parameter data
of $.ajax
, jQuery takes care of these data correctly.
But when you turn the object into one string in JSON format using JSON.stringify(dados)
it is necessary to decode this string in PHP:
<?php
$blocos = (!empty($_POST['blocos']) ? json_decode($_POST['blocos']) : NULL);