2010-04-17 8 views
5

La chiamata ajax funziona correttamente in FF. i dati restituiti sono in JSON Ecco un esempio da FF Firebug -IE8 + Jquery chiamata ajax che fornisce parsererror da dJango: per dati json che sembra valido in Firefox

{ "noProfiles": "sono stati creati Nessun profilo, consente di iniziare ora"}

Quando provo a stampare l'errore in IE8 (& anche in modalità di compatibilità), dice "parsererror".
Ma l'output sembra essere JSON valido.
Ecco la chiamata alla funzione Ajax che sto facendo.
Qualsiasi suggerimento sarebbe fantastico!

$.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); 
    } 
}); 

Gli avvisi la funzione di errore di cui sopra danno -
xhr:<blank>
textstatus:parsererror
errorThrown: undefined

Qualsiasi puntatori sarebbe grande!
Nota: jquery: 1.3.2

risposta

8

Ecco la soluzione che ho finalmente trovato!

IE è anale su UTF-8, non solo!
Ho formulava la mia risposta, come di seguito:

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

Ora FF & Chrome è bene con questo.
Ma per IE l'utf8 dovrebbe essere simile a questo:

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

Annotare il caps UTF - >>UTF-8

per il debug del problema, ho buttato la mia jquery e ha scritto un nudo ossa funzione 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; 

Se la codifica non è corretto, ti do questo errore in IE - c00ce56e

+0

Ho ricevuto l'errore "af_pTempString non è stato definito" quando ho copiato il codice. Cosa mi manca?Cosa è "af_pTempString" in modo attivo? – Gagan

0
  1. Controllare se l'intestazione Content-Type è impostato su application/json.

  2. Rimuovi dataType: "json" e stampa la risposta non elaborata ricevuta in IE8. Forse una risposta diversa (non valida JSON) viene inviata a IE (8) per qualche motivo

  3. Prova con l'ultima versione di jQuery e verifica se il problema persiste.

+0

Attualmente il tipo di contenuto è qualcosa di simile --- >> Ho inserito application/json al posto di text/html e ha dato lo stesso errore. Dopo di che ho commentato 'dataType: "json"' ma ancora lo stesso errore. Cercando jquery 1.4.2 ora. – PlanetUnknown

+0

È un'app django. Quindi il tipo di contenuto è impostato come segue: return HttpResponse (simplejson.dumps (response_dict), content_type = 'application/json; charset = utf8'). Modificato in 1.4.2 ma non ha aiutato. – PlanetUnknown

Problemi correlati