2010-04-17 8 views
5

La llamada AJAX funciona bien en FF. los datos devueltos en JSON aquí es un ejemplo de Firebug FF -IE8 + Jquery ajax atención telefónica que da parsererror de Django: para los datos JSON que parece válida en Firefox

{ "noProfiles": "! No se han creado perfiles, vamos a empezar ahora"}

Cuando intento imprimir el error en IE8 (& en modos de compatibilidad también), dice "parsererror".
Pero la salida parece ser JSON válida.
Aquí es la llamada a la función ajax estoy haciendo.
¡Cualquier apuntador sería genial!

$.ajax({ 
    type: "GET", 
    url: "/get_all_profile_details/", 
    data: "", 
    dataType: "json", 
    beforeSend: function() {alert("before send called");}, 
    success: function(jsonData) { 
     alert("data received"); 
    }, 
    error: function(xhr, txt, err){ 
     alert("xhr: " + xhr + "\n textStatus: " + txt + "\n errorThrown: " + err); 
    } 
}); 

Las alertas en la función de error anteriores dan -
xhr:<blank>
textstatus:parsererror
errorThrown: undefined

Cualquier punteros sería genial!
Nota: jQuery: 1.3.2

Respuesta

8

¡Aquí está la solución que finalmente encontré!

IE es anal sobre UTF-8, no sólo eso!
formulaba mi respuesta a continuación:

return HttpResponse(simplejson.dumps(response_dict), 
        content_type = 'application/json; charset=utf8') 

Ahora FF & Chrome es bueno con esto.
Pero para IE el UTF-8 debe ser como este:

return HttpResponse(simplejson.dumps(response_dict), 
        content_type = 'application/json; charset=UTF-8') 

Nota las tapas UTF - >>UTF-8

para depurar el problema, tiré mi jQuery y escribió un esqueleto función ajax

var xmlhttp = false;  
if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari  
    xmlhttp=new XMLHttpRequest();  
    xmlhttp.open("POST",urlToSend,false);  
    xmlhttp.send(af_pTempString);  
}  
else  
{// code for IE6, IE5  
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  
    xmlhttp.open("POST",urlToSend,false);  
    // Do not send null for ActiveX  
    xmlhttp.send(af_pTempString);  
}  
//alert("xmlhttp.responseText : " + xmlhttp.responseText);  
document.getElementById('navHolder').innerHTML = xmlhttp.responseText; 

Si la codificación es incorrecta, se te dará este error en IE - c00ce56e

+0

Recibí el error "af_pTempString no está definido" cuando copio el código pegado. ¿Qué me estoy perdiendo?¿Qué es "af_pTempString" actually? – Gagan

0
  1. Comprobar si la cabecera Content-Type se establece en application/json.

  2. Quitar tipoDatos: "json", e imprimir la respuesta en bruto que se obtiene en IE8. Tal vez se envíe una respuesta JSON diferente (no válida) a IE (8) por algún motivo

  3. Pruebe con la última versión de jQuery y vea si el problema persiste.

+0

Actualmente el tipo de contenido es algo como esto --- >> Inserté application/json en lugar de text/html y me dio el mismo error. Después de eso, comenté 'dataType: "json"' pero el mismo error. Probando jquery 1.4.2 ahora. – PlanetUnknown

+0

Es una aplicación django. Por lo tanto el tipo de contenido se establece como esto - volver HttpResponse (simplejson.dumps (response_dict), content_type = 'application/json; charset = utf8'). Cambiado a 1.4.2 pero no ayudó. – PlanetUnknown

Cuestiones relacionadas