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.