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.