JSON на IE6 (IE7)


77

Вибачте за мою нетерплячість, але через тижні, затримуючись до пізнього часу і просто переклавши свою мережу в Інтернет, у мене просто не залишається енергії для налагодження ... Я просто не можу Google, як реалізувати JSON на IE6 та IE7 ... використовую

JSON.stringify(...)

Наскільки я розумію, JSON не вбудований в IE6-7 і його потрібно динамічно додавати у вбудований код ... як ви це робите?

У мене вже є jQuery - чи правильно я розумію, що їх механізм JSON покладається на власний браузер?

Тоді якийсь коментар щодо недійсного коду JSON, що змушує IE6-7 вийти з ладу, але я думав, що він не є рідним у IE6-7?

Хто-небудь?

Відповіді:


105

Оскільки ви хочете використовувати JSON.stringify метод, вам потрібно буде включити синтаксичний аналізатор JSON3 , щоб підтримувати його на IE <8.

Ця бібліотека відповідає стандартним методам специфікації ECMAScript 5th Edition і перевіряє, чи доступна власна реалізація, тому в сучасному браузері буде використана ця власна реалізація.


thx - мені потрібен код, щоб динамічно включати його лише на IE6 / 7 (тобто потрібно також виявлення браузера)
Девід Торіссон,

1
або я не розумію - можливо, це мені не потрібно динамічно, оскільки JSON використовує власний браузер, якщо такий є, тому це просто <script src = " json.org/json2.js " type = "text / javascript"> </script> у заголовку?
Девід Торіссон,

2
@David, ти можеш просто включити його на свої сторінки, і якщо браузер підтримує глобальний об'єкт JSON, він нічого не зробить, або якщо ти хочеш, ти можеш включити його лише динамічноif (typeof JSON == 'undefined')
Крістіан С. Сальвадо

2
Я хочу додати jQuery.parseJSON ( api.jquery.com/jQuery.parseJSON ) замість json2, оскільки Jquery використовується набагато більше сайтів.
Стефан

2
@Stefan jQuery не робить stringify, а просто аналізує, це інакше
Бенджамін Груенбаум

2

Має бути щось неправильно зрозуміле. Нотація об'єктів вже деякий час є в JavaScript (наскільки я розумію, це основна концепція JavaScript). Я маю на увазі можливість писати код типу " var o= {a:"b"};
Отже, якщо ви можете це зробити, ви також можете зателефонуватиeval('var o= {a:"b"};') і саме таким чином ви "впроваджуєте JSON" у будь-який браузер.

ОНОВЛЕННЯ: Перечитайте свою публікацію і нарешті зрозуміли, що проблема полягає в серіалізації об’єктів, а не в їх десеріалізації. Тоді ви можете використовувати для цього бібліотеку JavaScript: https://github.com/douglascrockford/JSON-js/blob/master/json2.js


@David, я думаю, що це єдиний варіант, який ти маєш, якщо отримуєш дані JSON із якогось зовнішнього джерела даних. Чи не так?
найвісти 23.03.10

Eval - найгірший варіант, якщо ви хочете завантажити дані із зовнішнього джерела даних, він відкриває вам атаки введення сценарію. Якщо вам потрібна JSONсумісність об’єктів, це шлях.
mikerobi

mikerobi, дякую за коментар (але не за "проти"). Будьте застережені, що json2.js також викликає eval і всередині (див. Github.com/douglascrockford/JSON-js/blob/master/json2.js#L471 ). спосіб обійти це.
наивисти

2

Просто включіть json2.js у свій файл, щоб пограти з JSON. Це також буде працювати в IE 9.


1

"Динамічно доданий вбудований код" використовує функціонал, що надається бібліотекою json2 Дугласа Крокфорда, або власну реалізацію jQuery, якщо версія браузера не підтримує її спочатку.

jQuery не покладається на будь-які функції декодування JSON, що надаються браузером. Якщо браузер підтримує декодування JSON, тоді jQuery використовуватиме його.


добре, використовуючи jQuery, було б чудово, оскільки він уже включений, але чому тоді JSON.stringify (...) не працює на IE6-7, чи існує якийсь спеціальний синтаксис для jQuery JSON?
Девід Торіссон,

JSON.stringify працює на IE6-7, за умови, що ви додали сценарій: \
Метт

Я отримую:
Андерс Брандеруд,

@AndersBranderud: Не повинно бути так. jQuery явно надає резервну копію. Якщо ви можете відтворити цю поведінку в останній версії jQuery (1.9.0b), я б подумав про подання помилки .
Matt

@Matt, спасибі! Я подав звіт про помилку: З Jquery 1.9.0, а також jquery-1.8.0.min.js: Виклик методу 'jQuery.parseJSON' викликає: "SCRIPT5009: 'JSON' є невизначеним jquery-1.8.0.min .js, рядок 2, символ 16953 "в IE 7 (я використовую IE9 з IE7 як" версію документа ").
Андерс Брандеруд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.