0

tengo el siguiente código en PHP:

$output = '';

$output .= 'values: [{ ';

$output .= 'arg: "N", ';
$output .= 'val1: '.round($Val1N / $rowCount,2).', '; 
$output .= 'val2: '.round($Val2N / $rowCount,2).', ';
$output .= 'val3: '.round($Val3N / $rowCount,2).', ';
$output .= 'val4: '.round($Val4N / $rowCount,2).', ';
$output .= 'val5: '.round($Val5N / $rowCount,2).', ';
$output .= 'val6: '.round($Val6N / $rowCount,2).', ';
$output .= 'val7: '.round($Val7N / $rowCount,2).', ';
$output .= 'val8: '.round($Val8N / $rowCount,2).' }, {';

$output .= 'arg: "NNE", ';
$output .= 'val1: '.round($Val1NNE / $rowCount,2).', '; 
$output .= 'val2: '.round($Val2NNE / $rowCount,2).', ';
$output .= 'val3: '.round($Val3NNE / $rowCount,2).', ';
$output .= 'val4: '.round($Val4NNE / $rowCount,2).', ';
$output .= 'val5: '.round($Val5NNE / $rowCount,2).', ';
$output .= 'val6: '.round($Val6NNE / $rowCount,2).', ';
$output .= 'val7: '.round($Val7NNE / $rowCount,2).', ';
$output .= 'val8: '.round($Val8NNE / $rowCount,2).' }]';

echo json_encode($output);

Que me genera unos valores previamente calculados, hasta aquí todo correcto, el problema viene al devolver con echo este array de Objetos, utilizo ajax con el siguiente código :

       $.ajax({
          url:'process.php',
          method:"POST",
          data:{a:a, b:b, c:c},
           success:function(data)
          {
            var response = JSON.parse(data);
            funcion_cargar(response);

El problema viene cuando devuelvo los valores pero utilizando console.info(response) parece que en formato String, en cualquier caso no de la forma que los necesito. Funciona correctamente si creo una variable en la página principal de la siguiente forma:

var response = 
[{values: 
[{arg: "N",
val1: 0, 
val2: 0.01,
val3: 0,
val4: 0,
val5: 0,
val6: 0,
val7:0,
val8: 0}, {
arg: "NNE",
val1: 0,
val2: 0.01,
val3: 0,
val4: 0,
val5: 0,
val6: 0,
val7: 0,
val8: 0
}]}];

Decir que la función que utiliza los valores en la página principal utiliza los valores de esta forma

   funcion_cargar(response){
    ...
    dataSource: response[0].values,
    ...
   }
8
  • Cuidado porque aquí: $output .= 'val8: '.round($Val8NNE / $rowCount,2).' }; te falta cerrar la comilla simple: $output .= 'val8: '.round($Val8NNE / $rowCount,2).' }';
    – track3r
    Commented el 27 abr. 2018 a las 12:25
  • En la petición ajax te falta el datatype: dataType: "json",
    – track3r
    Commented el 27 abr. 2018 a las 12:26
  • yo me pregunto donde cierra esto 'values: [{ '; ? donde cierras eso ? Commented el 27 abr. 2018 a las 12:28
  • Gracias, lo de las comillas no es el problema ya que este código sigue hasta 16 sectores si te fijas en N, NNE, NE, ENE así hasta 16 lo que pasa es que lo he recortado para la pregunta.
    – F.Sola
    Commented el 27 abr. 2018 a las 12:29
  • 1
    Gracias Sebastián, como he dicho el código es más extenso y lo cierro más abajo pero no lo he puesto en la pregunta por no alargarlo
    – F.Sola
    Commented el 27 abr. 2018 a las 12:43

1 respuesta 1

4

Estas generando una cadena json, que luego codificas a json. Eso no es lo que quieres. Lo que te interesa es crear un array, y luego codificarlo a json.

Podrias probar algo como:

$output = [];
$output['values'][] = [
  'arg' => 'N',
  'val1' => round($Val1N / $rowCount, 2),
  'val2' => round($val2N / $rowCount, 2),
];

$oputput['values'][] = [
  'arg' => 'NNE',
  'val1' => round($Val1NNE / $rowCount, 2),
  'val2' => round($val2NNE / $rowCount, 2),
];

Eso es un objeto output, con una etiqueta VALUES que contiene un array de elementos.

y ahora si, eso lo puedes enviar como un json:

echo json_encode($output, true);
1
  • Gracias Jakala me ha funcionado bien ya obtengo el objeto con un array de elementos. ¿Puedes editar la respuesta y poner el nombre de variable correctamente?. Gracias de nuevo
    – F.Sola
    Commented el 27 abr. 2018 a las 13:53

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.