jQuery IE9 JSON.SyntaxError parseerror, но JSON действителен - PullRequest
4 голосов
/ 25 августа 2011

У меня есть некоторый код jQuery (1.6.2, последняя стабильная версия), который работает в Chrome, Firefox, Safari, IE7 и IE8 ... но IE9 не удается разобрать мой ответ json ajax. JSON действителен, и я прошел через http://jsonlint.com/

$.ajax({
    url: lookupURL,
    dataType: "json",
    cache: false, // don't cache the result
    contentType: "application/json", //tell the server we're looking for json
    success: function(data) {
        // do stuff with result
    },
    error: function(xhr, errorString, exception) {
        alert("xhr.status="+xhr.status+" error="+errorString+" exception=|"+exception+"|");
    }
});

Обработчик ошибок - тот, который вызывает jQuery (только для IE9). Xhr.status = 200, errorString = parseerror и исключение = SyntaxError JSON.parse

Мой json действителен, и я даже проверил, используя очень простую строку json:

{"foo":"bar"}

Я с помощью xhr.responseText проверил, что в json нет начальных или конечных пробелов.

Почему это не работает в IE9?

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Нашел проблему.Система, с которой я работаю, представляет собой довольно обширную среду CMS и электронной коммерции, поэтому они имеют много javascript в своих собственных библиотеках.Глубоко внутри одной из своих библиотек js они заменяли глобальный объект JSON и предоставляли свою собственную реализацию JSON.parse.Похоже, это была более старая и / или взломанная версия json2 с сайта json.org.Когда я пытался решить эту проблему ранее, я пытался установить json2 в качестве объекта JSON, но безрезультатно ... но оказалось, что они забивали мой json2 своим.Я переместил мою установку json2, чтобы она была последней загруженной javascript, и теперь она работает.Я не знаю, какой IE9 был единственным затронутым ... но вы идете.

1 голос
/ 25 августа 2011

Несколько вещей, которые вы можете попробовать, но сначала удалите contentType, так как я не думаю, что он вам нужен для исправления вашей ошибки.

1) Отсюда: http://api.jquery.com/jQuery.ajax/ dataType "Начиная с jQuery 1.5, jQuery может преобразовывать dataType из того, что он получил в заголовке Content-Type, в то, что вам нужно." Таким образом, вы можете попробовать свой dataType как 'text json'

2) Ваш json обрезан (без пробелов вокруг него)?

3) Пробовали ли вы (хотя бы в качестве теста) использовать getJSON ()?

...