IE8 + Jquery ajax调用从dJango给出parsererror:对于在Firefox中看起来有效的json数据

时间:2010-04-17 16:56:15

标签: jquery ajax internet-explorer-8

ajax调用在FF中工作正常。 这里返回的数据是JSON,这是FF firebug的一个例子 -

  

{“noProfiles”:“没有创建配置文件,现在就开始吧!”}

当我尝试在IE8中打印错误时(以及在兼容模式下),它会显示“parsererror”。
但输出似乎是有效的JSON 这是我正在制作的ajax函数调用 任何指针都会很棒!

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

上面错误函数中的警报给出了 -
xhr:<blank>
textstatus:parsererror
errorThrown: undefined

任何指针都会很棒! 注意:jquery:1.3.2

2 个答案:

答案 0 :(得分:8)

这是我终于找到的解决方案!

IE是关于UTF-8的肛门,不仅如此! 我正在制定我的回复如下:

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

现在FF&amp; Chrome很好用。
但是对于IE来说,utf8应该是这样的:

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

请注意大写字母UTF - &gt;&gt; UTF-8

为了调试这个问题,我扔了我的jquery并编写了一个简单的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; 

如果编码不正确,它会在IE中给你这个错误 - c00ce56e

答案 1 :(得分:0)

  1. 检查Content-Type标头是否设置为application / json。

  2. 删除dataType:“json”,并打印您在IE8中获得的原始响应。由于某种原因,可能会向IE(8)发送不同的(无效的JSON)响应

  3. 尝试使用最新版本的jQuery,看看问题是否仍然存在。