Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Cómo hacer que AJAX devuelva un JSON

Estas en el tema de Cómo hacer que AJAX devuelva un JSON en el foro de Jquery en Foros del Web. Hola! La idea es que de la respuesta AJAX yo pueda imprimir una parte en un DIV, otra en un SPAN, por ejemplo. Par esto ...
  #1 (permalink)  
Antiguo 13/05/2015, 07:10
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta Cómo hacer que AJAX devuelva un JSON

Hola!

La idea es que de la respuesta AJAX yo pueda imprimir una parte en un DIV, otra en un SPAN, por ejemplo.
Par esto intento que el archivo PHP llamado por AJAX (process.php), devuelva un JSON.

Lo intento así, pero sale error tipo ABORT:
Código Javascript:
Ver original
  1. $.ajax({
  2.     type: "POST",
  3.     data: datos,         // DATOS contiene el resultado de un serialize() a un formulario
  4.     dataType: "json",
  5.     url: "process.php",
  6.     success: function(response) {
  7.         for (var i in response) {
  8.             $('#mi_tabla').append(response.HTMLtabla[i]);
  9.             $('#mi_select').append(response.HTMLselect[i]);
  10.         }
  11.     },
  12. });

Y el process.php ejecuta esto:
Código PHP:
$var1 "<tr> <td> ... </td> </tr>";
$var2 "<option> ... </option>";

$arrayRespuestas = array('HTMLtabla' => $var1'HTMLselect' => $var2);
$respuestasJSON json_encode($arrayRespuestas);
print_r$respuestasJSON ); 
¿Por qué no llega a ejecutarse AJAX?

Saludos!
  #2 (permalink)  
Antiguo 13/05/2015, 09:34
Avatar de Nopal_Studio  
Fecha de Ingreso: julio-2012
Ubicación: DF
Mensajes: 42
Antigüedad: 11 años, 9 meses
Puntos: 10
Respuesta: Cómo hacer que AJAX devuelva un JSON

Creo que esta usando mal el Ajax.

Ejemplo:

$.ajax({
method: "POST",
url: "archivo.php",
data: datosEnviar,
dataType: "json"
})
.done(function(datos) {
if(datos != "") //Verifica que si retorne datos
{
alert(datos);
}
else
{ alert("no trae datos")}
});
  #3 (permalink)  
Antiguo 13/05/2015, 21:08
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta Respuesta: Cómo hacer que AJAX devuelva un JSON

Cita:
Iniciado por Nopal_Studio Ver Mensaje
Creo que esta usando mal el Ajax...
Gracias por responder, amigo Nopal_Studio.

Hice ya otras pruebas y he semilocalizado el problema, aunque sigo sin poder solucionarlo. He aquí los scripts:
Código Javascript:
Ver original
  1. $("#formularioCrearUsuario").on("submit", function(e) {
  2.     e.preventDefault();
  3.     var datos = $("#formularioCrearUsuario").serializeArray();
  4.     $.ajax({
  5.         type: "POST",
  6.         dataType: "json",
  7.         url: "process.php",
  8.         data: datos,
  9.     }).done(function(response){
  10.         for (var i in response) {
  11.             $("#tablaResultado").html( response[i] );
  12.         }
  13.     });
  14. });
Código PHP:
$respuesta = new stdClass();

if ( 
$resultado $conexion->query($query) ) {
    while (
$fila $resultado->fetch_array()) {
        
$num                $fila["numero"];
        
$nom                $fila["nombre"];
        
$ciu                $fila["ciudad"];
        
$filaHTML           "";
        
$selectCliente      "";

        
$filaHTML          .= "<tr> <td>".$num."</td> <td>".$nom."</td> <td>".$ciu."</td> <td>...</td> </tr>";
        
$selectCliente     .= "<option>".$nom."</option>";
    }    
    
$arrayRespuestas = array(
        
'filaHTML' => 'filaHTML',
        
'selectCliente' => 'selectCliente'
    
);
    echo 
json_encode($arrayRespuestas);


Esto que ves aquí, mi amigo, funciona ok. Pero sólo lo hace porque los valores de $arrayRespuestas son cadenas. Si en su lugar ponermos variables, entonces no funciona y sale un error parsererror. Es decir, no funciona si ponemos esto:
Código PHP:
$arrayRespuestas = array(
'filaHTML' => $filaHTML,
'selectCliente' => $selectCliente
); 
Entonces, el array no está mal construido, lo que está mal son sus valores, que AJAX no sabe qué hacer con ellos.

¿Alguna idea?
  #4 (permalink)  
Antiguo 14/05/2015, 09:41
Avatar de Nopal_Studio  
Fecha de Ingreso: julio-2012
Ubicación: DF
Mensajes: 42
Antigüedad: 11 años, 9 meses
Puntos: 10
Respuesta: Cómo hacer que AJAX devuelva un JSON

HAber intenta con esto:


Código PHP:
Ver original
  1. $respuesta = new stdClass();
  2. $arrayRespuestas = new Array();
  3.  
  4. if ( $resultado = $conexion->query($query) ) {
  5.     while ($fila = $resultado->fetch_array()) {
  6.         $num                = $fila["numero"];
  7.         $nom                = $fila["nombre"];
  8.         $ciu                = $fila["ciudad"];
  9.         $filaHTML           = "";
  10.         $selectCliente      = "";
  11.  
  12.         $filaHTML          .= "<tr> <td>".$num."</td> <td>".$nom."</td> <td>".$ciu."</td> <td>...</td> </tr>";
  13.         $selectCliente     .= "<option>".$nom."</option>";
  14.         $arrayRespuestas[] = (        'filaHTML' => $filaHTML,
  15.         'selectCliente' => $selectCliente );
  16.     }    
  17.  
  18.     echo json_encode($arrayRespuestas);
  19. }
  #5 (permalink)  
Antiguo 15/05/2015, 06:29
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: Cómo hacer que AJAX devuelva un JSON

Cita:
Iniciado por Nopal_Studio Ver Mensaje
HAber intenta con esto...
No, Nopal_Studio, pues no funciona!

Sin embargo, ya logré encontrar el error y solucionarlo .

¿Qué era? Pues resultó que la cosa no tenía nada que ver con el código. Éste estuvo bien desde el principio. El problema era la base de datos. Uno de los campos en los que insertaba info, y leía info, era tipo SET.

Nunca había empleado este tipo de campo, pero lo hice y, por supuesto, hizo que me doliera la cabeza un buen rato .

Lo cambié por un varchar y todo va sobre rieles!

De todas formas, gracias por tu ayuda, Nopal_Studio, y hasta pronto.

Última edición por berkeleyPunk; 15/05/2015 a las 06:36

Etiquetas: ajax
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:48.