2011-02-27 9 views
6

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"}] 
+0

He tenido algunos problemas extraños como ese antes, esto funcionó para mí en ese escenario msg = jQuery.parseJSON (respuesta); – Peter

+0

¿Estás seguro de que ajax.php está en el mismo directorio que la URL desde la que se realiza la solicitud? –

+0

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

Respuesta

7

tiene una matriz, por lo que necesita para acceder a ella por el primer índice.

En lugar de:

alert(msg.error); 

hacer:

alert(msg[0].error); 
+2

!!!!!!!!!!!! +1 – karim79

+0

Ah sí, ahora me di cuenta inmediatamente después de que se publicó su respuesta, '[{}]' - objeto de matriz, '{}' - objeto. jQuery API docs debería haber incluido eso en los documentos! : P – MacMac

+0

He intentado analizar '{" result ":" success "," msg ":" Success "}' en javascript, pero obtuve el valor 'undefined' cuando estoy imprimiendo' data.result' cualquier solución ?? ? –

1

Uso $ .post si es posible. Establece el tipo de contenido a HTML de forma automática.