IE8 + JQuery ajax-вызов, выдающий parsererror от dJango: для данных json, которые кажутся действительными в Firefox - PullRequest
5 голосов
/ 17 апреля 2010

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><br> textstatus:parsererror<br> errorThrown: undefined

Любые указатели были бы великолепны!
Примечание: jquery: 1.3.2

Ответы [ 2 ]

8 голосов
/ 18 апреля 2010

Вот решение, которое я наконец нашел!

IE - это анальный UTF-8, не только это!
Я сформулировал свой ответ следующим образом:

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

Теперь FF & Chrome хорош в этом.
Но для IE utf8 должен быть таким:

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

Обратите внимание на заглавные буквы UTF - >> 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

0 голосов
/ 17 апреля 2010
  1. Проверьте, установлен ли заголовок Content-Type на application / json.

  2. Удалите dataType: "json" и распечатайте необработанный ответ, полученный в IE8. Может быть, другой (не действительный JSON) ответ отправляется в IE (8) по некоторым причинам

  3. Попробуйте использовать последнюю версию jQuery и посмотрите, сохраняется ли проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...