Tengo un script PHP en el que obtengo el contenido de una consulta realizada en una base de datos Postgresql:
<?php require_once 'connection.php'; $query1 = pg_query("This_is_my_query"); $instruction = "["; while ($row = pg_fetch_array($query1)) { $row1= $row['row1']; $row2= $row['row2']; $instruction .= "{name : '". $row1. "', y : ". $row2. "},"; } $instruction .= "]"; echo $instruction; ?> La echo $instruction da:
[{name : 'Prestation', y : 1}] Luego tengo un archivo JS en el que trato de mostrar y usar la variable $instruction .
Uso Ajax y mi script es el siguiente:
$.ajax({ url : 'Path_To_Php_File_Is_OK', // requesting a PHP script dataType : 'json', type: "GET", async : false, success : function (data) { // data contains the PHP script output alert(data); }, error: function(data) { alert('error'); }, }) El resultado es que no se llama a la función de éxito y tengo la alert('error') . Pero cuando uso el tipo de datos 'texto' y no 'Json', la función de éxito está bien y tengo la alert(data) .
¿Cómo explicar ese comportamiento? ¿Y cómo podría analizar la $instruction la variable PHP?
Cualquier ayuda sería muy apreciada, ¡gracias!
?> es redundante y no se recomienda su uso (ver PSR-12 )Entonces, eventualmente, su código debería verse así
<?php require_once 'connection.php'; $query1 = pg_query("This_is_my_query"); $instructions = []; while ($row = pg_fetch_array($query1)) { $row1 = $row['row1']; $row2 = $row['row2']; $instructions[] = ['name' => $row1, 'y' => $row2]; } header('Content-Type: application/json; charset=utf-8'); echo json_encode($instructions);