Send JSON Javascript data to PHP

Asked

Viewed 135 times

0

I am trying to send data in javascript json format to php according to the codes below. However, the result of var_dump($_data) is always NULL. I tested the javascript activity array and it is ok, with the data that should be.

Javascript:

var gravaDados = function(){
     $.ajax({
          url : "./php/xml-request.php",
          type : 'post',
          data : {
            set_optx : "",
            dados : (JSON.stringify(atividades)),
            regiao :'Itabira'
          }
     })
     .done(function(msg){
          alert(msg);
     })
     .fail(function(jqXHR, textStatus, msg){
          alert(msg);
     }); 
}

PHP:

    if(isset($_POST['set_optx'])){

        $_dados = json_decode($_POST['dados']);
        $_regiao = $_POST['regiao'];

        var_dump($_dados);
        // Receberá todos os dados do XML
        $xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n";

        $xml.= "<regiao>".$_regiao."</regiao>\n";

        // A raiz do meu documento XML
        $xml .= "<atividades>\n";

        for ( $i = 0; $i < count( $_dados ); $i++ ) {
            $xml .= "\t<atividade>\n";
            $xml .= "\t\t<prefixo>" . $_dados[$i]->{"prefixo"} . "</prefixo>\n";
            $xml .= "\t\t<local_troca>" . $_dados[$i]->{"local_troca"} . "</local_troca>\n";
            $xml .= "\t\t<horario>" . $_dados[$i]->{"horario"} . "</horario>\n";
            $xml .= "\t\t<veiculo>" . $_dados[$i]->{"veiculo"} . "</veiculo>\n";
            $xml .= "\t\t<atividade>" . $_dados[$i]->{"atividade"} . "</atividade>\n";
            $xml .= "\t\t<matricula>" . $_dados[$i]->{"matricula"} . "</matricula>\n";
            $xml .= "\t\t<nome>" . $_dados[$i]->{"nome"} . "</nome>\n";
            $xml .= "\t</atividade>\n";
        }

        $xml .= "</atividades>\n";

        // Escreve o arquivo
        $fp = fopen('_dados.xml', 'w+');
        fwrite($fp, $xml);
        fclose($fp);
    }

2 answers

1

In AJAX you pass the data directly, in dados : (JSON.stringify(atividades)), takes the JSON.stringify thus, dados : atividades,

and in PHP you don’t need json_decode, puts a var_dump($_POST) to verify.

If you want to ensure that communication is done through JSON puts after the type:

dataType: 'JSON',

thus, if there is no back-end JSON response AJAX accuses error

  • It worked without dataType, but is sending as array and not json.

  • 1

    The dataType ensures that the answer is JSON and if it is not the error, but the sending is not. Try putting console.log(JSON.stringify(atividades)); to validate if the value is correct. And because sending the data has to be JSON the other information does not?

0

Use json_encode to display json.

Example:

$fruta[1] = 'Laranja';
$fruta[2] = 'Banana';
$fruta[3] = 'Abacate';

echo json_encode($fruta);

Upshot:

{"1":"Orange","2":"Banana","3":"Avocado"}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.