Более новые версии jQuery (начиная с версии 1.4, я думаю) вообще не будут загружать недействительный JSON.
У вас есть два варианта: вы можете написать прокси на стороне сервера, который вызывает веб-сервис, анализирует неверный JSON и возвращает его в действительной форме, или вы можете использовать эту функцию (написано AlexСекстон , а не я!):
jQuery.getInvalidJSON = function(url, data, callback) {
return jQuery.get(url, data, function(d){
callback.call(this, (new Function('return (' + d + ')'))());
}, "text");
};
Это в основном то же самое, что и ответ Дьюфи: выполнение небезопасного eval
для строки JSON для получения пригодного для использования объекта. Убедитесь, что вы доверяете источнику , прежде чем использовать этот метод, так как будет выполнено все, что скрыто в JSON.
Редактировать : У меня было немного времени, чтобы на самом делепроверьте это и выясните, что в функции Алекса произошла небольшая ошибка.Строка JSON (переменная 'd') должна быть заключена в круглые скобки, чтобы быть оцененной как объект - я соответствующим образом отредактировал приведенный выше код.
В то время как приведенный выше загрузит JSON, который не совсем строго действительно (пропущены кавычки вокруг имен свойств, одинарные кавычки вместо двойных и т. Д.), У него есть свои ограничения.JSON, с которым вы работаете из этого веб-сервиса, просто сломан.
Кажется, что двойные кавычки вокруг массива вызывают большинство проблем.Вы можете обойти это следующим образом:
jQuery.getInvalidJSON = function(url, data, callback) {
return jQuery.get(url, data, function(d){
var cleaned = d.replace(/"\[/g, '[').replace(/\]"/g, ']');
callback.call(this, (new Function('return (' + cleaned + ')'))());
}, "text");
};
И назвать это так:
$.getInvalidJSON(url, null, readData);
Это очень глупо, и я настоятельно рекомендую исправить веб-службу, чтобы она возвращаласьправильный, действительный JSON.