How to return multiple JSON messages via PHP, each one being triggered at different times?

4

I'm building a system and at one stage it saves 3 sets of information filled out on the form by the system operator:

  • Set 1: student information;
  • Set 2: student guarantor information;
  • Set 3: information about student enrollment.

I am making requests to the code that saves the information via AJAX (using jQuery ), and on the server side the PHP script does some checks and returns some messages.

For example, the system checks for the existence of the student record and warns the operator, then verifies and can warn that the guarantor's CPF is invalid (if it passes the js validation).

What happens is that since there are two sets of messages it does this:

Ajax response giving error

InPHPcodeI'mdoingthis:

Warningsforinformationset1

// encontrou Registros do Aluno if($busca_aluno['sys'] === '002' && $aguardando_usuario === false){ $retorna['msg'] = 'Este Aluno foi reconhecido pelo sistema'; //verifica status da matrícula do aluno if($busca_aluno['situacao_pessoa'] === 1){ //ativa, identifica rematrícula $operacao_aluno = 'rematricula'; //updt $retorna['msg'] .= '<p>A matricula do Aluno esta ativa e sera realizada a <strong>REMATRICULA</strong> dele. Aguarde...</p>'; }elseif($busca_aluno['situacao_pessoa'] === 0){ //inativa, identifica que o aluno passou um certo período sem se matricular $operacao_aluno = 'matricula'; //insert $retorna['msg'] .= '<p>A matricula do aluno estava inativa, ele sera matriculado normalmente.</p>'; }else{ // situação desconhecida $operacao_aluno = 'matricula'; //insert $retorna['msg'] .= "<p>O codigo retornado pelo sistema para a situacao do aluno, e um codigo invalido de acordo com as diretrizes.</p>"; $retorna['msg'] .= "<p><strong>Informe a matrícula do aluno ao suporte. O cadastro do aluno sera continuado como MATRICULA.</strong></p>"; } // adiciona os dados de código do sistema ao array de mensagem $retorna = array_merge($busca_aluno, $retorna); echo json_encode($retorna); // aviso na tela }

The message structure of the other sets follow the same structure, the warnings appear one after the other.

    
asked by anonymous 15.12.2013 / 22:43

1 answer

7

If I understand correctly, you use three statements to return the JSON:

echo json_encode($retorna1);
echo json_encode($retorna2);
echo json_encode($retorna3);

Each json_encode is generating an associative array ( { ... } ) and, by concatenating the three answers, you have a badly formed JSON. Since you want to return three things, you should return a list, which in JSON is represented by [ ... ] , with elements separated by commas.

The solution is to create an array to serve as a list, add each response and at the end return the json_encode of that list:

$lista_retorna = array();
$lista_retorna[] = $retorna1;
$lista_retorna[] = $retorna2;
$lista_retorna[] = $retorna3;

echo json_encode($lista_retorna);

The result JSON will be valid, in [{...}, {...}, {...}] format, where every {...} is a response.

    
15.12.2013 / 23:04