Saltar al contenido

Solicitud jQuery ajax con respuesta json, ¿cómo?

Por fin luego de mucho luchar pudimos dar con la respuesta de esta contratiempo que tantos lectores de nuestro sitio han presentado. Si quieres compartir alguna información no dejes de dejar tu comentario.

Solución:

Tienes que llamar al

$.parseJSON();

Por ejemplo:

...
success: function(data)
       var json = $.parseJSON(data); // create an object with the key of the array
       alert(json.html); // where html is the key of array that you want, $response['html'] = "something..";
    ,
    error: function(data)
       var json = $.parseJSON(data);
       alert(json.error);
     ...

ver esto en http://api.jquery.com/jQuery.parseJSON/

si todavía tiene el problema de las barras: busque security.magicquotes.disabling.php o: function.stripslashes.php

Nota:

Esta respuesta aquí es para aquellos que intentan usar $.ajax con el dataType propiedad establecida en json e incluso eso obtuvo el tipo de respuesta incorrecto. Definición de la header('Content-type: application/json'); en el servidor puede corregir el problema, pero si regresa text/html o de cualquier otro tipo, el $.ajax el método debe convertirlo a json. Hago una prueba con versiones anteriores de jQuery y solo después de la versión 1.4.4 los $.ajax obligar a convertir cualquier tipo de contenido al dataType aprobado. Entonces, si tiene este problema, intente actualizar su versión de jQuery.

En primer lugar, ayudará si configura los encabezados de su PHP para servir JSON:

header('Content-type: application/json');

En segundo lugar, ayudará a ajustar su llamada ajax:

$.ajax(
    url: "main.php",
    type: "POST",
    dataType: "json",
    data: "action": "loadall", "id": id,
    success: function(data)
        console.log(data);
    ,
    error: function(error)
         console.log("Error:");
         console.log(error);
    
);

Si tiene éxito, la respuesta que reciba debe recogerse como true JSON y un objeto deben registrarse en la consola.

NOTA: si desea obtener html puro, es posible que desee considerar usar otro método para JSON, pero personalmente recomiendo usar JSON y convertirlo en html usando plantillas (como Handlebars js).

Dado que está creando un marcado como string no tienes que convertirlo en json. Simplemente envíelo ya que está combinando todos los array elementos usando implode método. Prueba esto.

cambio PHP

$response = array();
$response[] = "link";
$response[] = 1;
echo implode("", $response);//<-----Combine array items into single string

JS (cambie el tipo de datos de json a html o simplemente no lo configure, jQuery lo resolverá)

$.ajax(
   type: "POST", 
   dataType: "html", 
   url: "main.php", 
   data: "action=loadall&id=" + id,
   success: function(response)
      $('#main').html(response);
   
);

Reseñas y valoraciones del tutorial

Nos encantaría que puedieras comunicar este post si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 3)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *