2010-04-17 15 views
5

ajax çağrısı FF'de iyi çalışıyor. döndü veriler burada JSON olduğu FF kundakçı gelen bir örnektir -IE8 + JQuery ajax çağrısı dJango'dan parsererror veriyor: Firefox'ta geçerli görünen json verileri için

{ "noProfiles": "Şimdi başlatmanızı sağlar, hiçbir profilleri yaratılmıştır"}

Ben baskı deneyin IE8'deki hata (& uyumluluk modlarında da), "parsererror" yazıyor.
Ancak çıktı geçerli JSON olarak görünüyor.
İşte yaptığım ajax işlev çağrısı.
Herhangi bir işaretçi harika olurdu! vermek için yukarıdaki hata fonksiyonunda

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

uyarılar -
xhr:<blank>
textstatus:parsererror
errorThrown: undefined

Herhangi işaretçiler çok iyi olurdu!
Not: jQuery: Content-Type başlığı uygulama/json olarak ayarlanırsa 1.3.2

cevap

8

İşte sonunda bulduğum çözüm!

IE sadece UTF-8 ile ilgili değil!
Ben aşağıdaki gibi benim tepkisini formüle edilmiştir:

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

Şimdi FF & Chrome bu iyidir.
Ama IE için utf8 böyle olmalı:

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

Not kapaklar UTF - >>UTF-8

sorunu ayıklamaya için, bir çıplak kemikleri benim jquery attı ve yazdı ajax işlevi. kodlama yanlışsa

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; 

, bu IE'de bu hatayı vereceğiz - c00ce56e

+0

Kodunuzu yapıştırdığımda "af_pTempString tanımlı değil" hatası aldım. Neyi kaçırıyorum?"Af_pTempString" in aktüel olarak nedir? – Gagan

0
  1. kontrol edin.

  2. Verileri kaldırın: "json", ve IE8'de aldığınız ham yanıtı yazdırın. Belki farklı bir (geçerli JSON) yanıtı, bazı nedenlerle IE'ye (8) gönderilir

  3. jQuery'nin en son sürümüyle çalışın ve sorunun devam edip etmediğini görün.

+0

Şu içerik türü bu --- >> Metin/html yerine uygulama/json ekledim ve aynı hatayı verdi. Bundan sonra 'dataType:' json '' yorumunu yaptım ama yine de aynı hata. Şimdi jquery 1.4.2'yi deniyorum. – PlanetUnknown

+0

Onun bir django uygulaması. Bu nedenle içerik türü şöyle ayarlanır: - HttpResponse (simplejson.dumps (response_dict), content_type = 'application/json; charset = utf8'). 1.4.2 olarak değiştirildi, ancak yardım etmedi. – PlanetUnknown