No sé por qué, pero hay un problema que encuentro con $.parseJSON
al hacer una llamada ajax, necesito verificar si la respuesta contiene JSON y luego continuar para analizarlo con $.parseJSON
, si no contiene ningún JSON, imprimirá la respuesta en un elemento (que contendrá algo de HTML).
Luego probé si eval
haría cualquier cosa, lo que por supuesto lo hizo, pero no quiero usar eval
para esto.
El código Tengo:
$.ajax({
url: 'ajax.php',
success: function(response)
{
var msg = $.parseJSON(response);
//alert(typeof(response)); <-- returns 'string'
//alert(typeof(msg)); <-- returns 'object'
//alert(msg.error); <-- this doesn't work at all.
//eval(response) <-- returns [object Object]
if(msg.error !== '')
{
ajaxWindow.html(msg.error);
}
else
{
ajaxWindow.html(response).hide().slideDown('slow');
}
}
});
¿Cómo puede ser que no es capaz de analizar la cadena JSON? jQuery.parseJSON claramente dice:
Toma una bien formada JSON cadena y devuelve el objeto JavaScript resultante.
Pero no se puede analizar nada, ¿se trata de algún tipo de error o quizás un error?
EDIT: El JSON:
[{"error":"Error loading template"}]
He tenido algunos problemas extraños como ese antes, esto funcionó para mí en ese escenario msg = jQuery.parseJSON (respuesta); – Peter
¿Estás seguro de que ajax.php está en el mismo directorio que la URL desde la que se realiza la solicitud? –
Publica el JSON que estás intentando analizar. Además, ¿qué obtienes cuando intentas 'alert (msg)'? El 'typeof' da' "object" 'para muchos tipos diferentes. – user113716