IE7 не переваривает JSON: "ошибка разбора" - PullRequest
5 голосов
/ 13 марта 2010

При попытке получить JSON моя функция обратного вызова НЕ запускается.

$.ajax({
    type:"GET",
    dataType:'json',
    url: myLocalURL,
    data: myData,
    success: function(returned_data) { 
        alert('success');
    }
});

Самое странное в этом то, что:

  1. мой JSON проверяется на JSONlint
  2. это ТОЛЬКО не работает в IE7 ... он работает в Safari, Chrome и во всех версиях Firefox (и даже в IE8). Если я использую 'error', то он сообщает "parseError" ... даже если он проверяется!

Есть что-нибудь, что я пропускаю? Разве IE7 не обрабатывает определенные символы, структуры данных (в моих данных нет ничего, кроме буквенно-цифровых, но в них есть вложенные JSON)? Я использовал множество других вызовов AJAX, которые все работают (даже в IE7), но за исключением этого вызова.

Пример возврата данных здесь: (это структурно-полный пример, то есть он пропускает только несколько полей второго уровня, но следует этой точной иерархии)

{"question":{
             "question_id":"19",
             "question_text":"testing",
             "other_crap":"none"
            },
  "timestamp":{
              "response":"answer",
              "response_text":"the text here"
              }
}

Я в полном недоумении. Надеюсь, у кого-то есть понимание того, что происходит ... спасибо!

EDIT Вот копия SIMPLEST-файла фиктивных данных, который я использую ... он все еще не работает в IE7.

{
  "question":{
         "question_id":"20",
         "question_text":"testing :",
         "adverse_party":"none",
         "juris":"California",
         "recipients":"Carl Chan"
         }
}

Я начинаю сомневаться, что это проблема JSON ... но я понятия не имею, что еще это может быть. Вот некоторые другие ресурсы, которые я нашел, которые могут быть причиной, но они, похоже, тоже не работают: http://firelitdesign.blogspot.com/2009/07/jquerys-getjson.html (Django по умолчанию использует Unicode, поэтому я не думаю, что это вызывает его)

У кого-нибудь есть еще идеи?

Ответы [ 3 ]

2 голосов
/ 13 марта 2010

Пример данных, которые вы представляете, выглядит неплохо, но мое сильное подозрение все еще заключается в том, что где-то есть незамкнутая запятая:

 "timestamp":{
              "response":"answer",
              "response_text":"the text here"
              }, <------------
}

IE - единственный браузер, который (правильно) отключается из-за этого.

Если это не так, можете ли вы показать полную выборку данных (или подтвердить, что приведенный вами пример действительно является полной выборкой)?

1 голос
/ 07 октября 2010

Я только что столкнулся с точно такой же проблемой. Оказывается, что IE7 не в состоянии анализировать ответы JSON, которые имеют начальные переводы строки \ r \ n в теле ответа. Ваше исправление удаления {% load customfilter %} работает, потому что вы удалили новую строку, которая была включена после этого тега.

Альтернативным решением было бы просто удалить новую строку, чтобы получить

{% load customfilter %}{ "question":{ "question_id":"{{question.id}}",
           "question_text":"{{question.question_text|customfilterhere}}"
         }
}
1 голос
/ 14 марта 2010

Вы уже исключили возможность проблемы с кэшированием?

например. Вы тестировали с IE7, когда myLocalURL вернул неверный JSON. IE7 все еще кэширует этот ответ, и поэтому он не работает. Попробуйте добавить что-то вроде этого (например, если php) в myLocalURL или сделать myLocalURL похожим на myLocalURL?random=123 только для тестирования, чтобы убедиться, что это не кеширование

header("Cache-Control: no-cache, must-revalidate");
header("Expires: 0");

Вы возвращаете правильный заголовок типа контента? например,

header("Content-Type: application/json");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...