How to send an array variable of objects via AJAX? [closed]

0

I have the following object:

var pessoas = [];

pessoas = {

  nome: "julio",
  sobrenome: "Henrique",
  idade: 18,
  amigos : ["Pedro", "João", "Isabella"]

}

I send the array friends via ajax like this:

$.ajax({
    url:'retira_falsos_amigos.php',
    type: "post",
    data: { amigos: pessoas.amigos },

    complete: function (response) {
        $('#output').html(response.amigosVerdadeiros);
    },
    error: function () {
        $('#output').html('Bummer: there was an error!');
    },
});

and there is no error.

However, in my code, array amigos turns an array of objects and, when making the same request, results in an error.

When he sees an array of objects, it looks like this:

itensAmigos[0] = {

  name: data[0][0],
  intervalo: intervalo,
  Start: Date.UTC(ano,mes,dia,hora,minuto),
  data: data[0][1],
  tooltip: {
     valueSuffix: " -"
  }

};

pessoas = {

  nome: "julio",
  sobrenome: "Henrique",
  idade: 18,
  amigos : itensAmigos

}

This is the error that appears:

    
asked by anonymous 04.01.2018 / 12:38

3 answers

2

Submit your full formatted object and treat it in php with json_decode (). To send the data use the JSON.stringify () function that will convert it to a string.

$.ajax({
    url:'retira_falsos_amigos.php',
    type: "post",
    data: { dados: JSON.stringify(pessoas) },

    complete: function (response) {
        $('#output').html(response.amigosVerdadeiros);
    },
    error: function () {
        $('#output').html('Bummer: there was an error!');
    },
});

retira_falsos_amigos.php

$amigos = isset($_POST['dados']) ? $_POST['dados'] : null;
$objAmigos = json_decode($amigos);
foreach($objAmigos->amigos as $key=>$obj){
    echo "Amigo ".$key." - Nome: ".$obj."<br>";
}
  

The answer is based on the example given in the question

    
04.01.2018 / 13:08
0

The first thing is to set the dataType property of ajax to json so that you can receive PHP's return as an object.

Instead of using complete of ajax , use success . The complete will always be executed independently if there is an error processing the request or not, and success only if everything happens correctly.

Here is a working example:

index.php

<!DOCTYPE html>
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script><script>$(function(){varpessoas={nome:"Julio",
                    sobrenome: "Henrique",
                    idade: 18,
                    amigos: ["Pedro", "João", "Isabella"]
                };

                function enviaFalsosAmigos() {
                    $.ajax({
                        url: "retira_falsos_amigos.php",
                        type: "post",
                        dataType: "json",
                        data: {amigos: pessoas.amigos},
                        success: function (response) {
                            var listaDeAmigosVerdadeiros = response.listaDeAmigosVerdadeiros;
                            for (var i = 0; i < listaDeAmigosVerdadeiros.length; i++) {
                                alert(listaDeAmigosVerdadeiros[i] + " é um amigo verdadeiro!");
                            }
                        },
                        complete: function () {
                            alert("A requisição foi finalizada.");
                        },
                        error: function (erro) {
                            alert("Ocorreu um erro ao processar a requisição.");
                        }
                    });
                }

                $("button").click(function (event) {
                    enviaFalsosAmigos();
                });
            });
        </script>
    </head>
    <body>
        <button>Clique para enviar os falsos amigos</button>
    </body>
</html>

retira_falsos_amigos.php

<?php
$listaDeAmigosFalsos = $_POST["amigos"];
$listaDeAmigos = ["Pedro", "João", "Isabella", "Diego"];

$listaDeAmigosVerdadeiros = array_diff($listaDeAmigos, $listaDeAmigosFalsos);

echo json_encode(["listaDeAmigosVerdadeiros" => array_values(listaDeAmigosVerdadeiros)]);
    
04.01.2018 / 13:55
-3

The first step is to define the type of the request in your ajax call:

$.ajax({
url:'retira_falsos_amigos.php',
type: "post", // Defina aqui o tipo da requisição
data: { amigos: pessoas.amigos },

complete: function (response) {
    $('#output').html(response.amigosVerdadeiros);
},
error: function () {
    $('#output').html('Bummer: there was an error!');
},

});

With this your javascript will make a post-type request for the php file retira_falsos_amigos.php. and to get your array in php you should use the global variable $ _POST ['friends']:

$amigos = isset($_POST['amigos']) ? $_POST['amigos'] : null;
    
04.01.2018 / 12:50