Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.02.2012, 16:47
Интересующийся
Отправить личное сообщение для sysif Посмотреть профиль Найти все сообщения от sysif
 
Регистрация: 09.12.2010
Сообщений: 12

JSON.stringify в IE8
Имеем следующий незамысловатый кусок кода:
JSON.stringify({Test: "Тест1"})

Запускаем в разных браузерах - имеем:

Chrome, FF, IE9 (в т.ч в режиме совместимости c IE8) -
"{"Test":"Тест1"}"

в IE8 -
"{"Test":"\u0422\u0435\u0441\u04421"}"

Собственно, вопрос, почему IE8 ведет себя иначе и можно ли его образумить?
Ответить с цитированием
  #2 (permalink)  
Старый 14.02.2012, 16:51
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Это вы увидели в console.log ?

alert("\u0422\u0435\u0441\u04421");


Это просто в юникоде закодированный текст, это то то же самое, просто там такая консоль, показывает как есть видимо

alert("\u0422\u0435\u0441\u04421" === "Тест1")
__________________
readOnly
Ответить с цитированием
  #3 (permalink)  
Старый 14.02.2012, 17:43
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

poorking,
Вы не совсем правы, попробуйте запустить в ИЕ8 вот это:
alert( JSON.stringify({Test: "Тест1"}).replace(/\\/g, '_') );

В во всех браузерах вы увидите:
{"Test":"Тест1"}

а в ИЕ8 вы увидите:
{"Test":"_u0422_u0435_u0441_u04421"}
Ответить с цитированием
  #4 (permalink)  
Старый 14.02.2012, 18:04
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Подождите подождите, в моем IE8 нет объекта JSON (Почему у вас всех есть?). А если ТС использует библиотеку, восстанавливающую объекс, то это она виновата

Версия: 8.0.6001.18702
__________________
readOnly

Последний раз редактировалось poorking, 14.02.2012 в 18:07.
Ответить с цитированием
  #5 (permalink)  
Старый 14.02.2012, 18:05
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

А образумить его можно так:
var normalJSONString = JSON.stringify({Test: "Тест1"}).replace(/\\u([\d]{4})/g, function(_, a){ return String.fromCharCode(parseInt(a, 16)) });

Пример проверять в ИЕ8:
alert( JSON.stringify({Test: "Тест1"}).replace(/\\u([\d]{4})/g, function(_, a){
    return String.fromCharCode(parseInt(a, 16));
}).replace(/\\/g, '_') );
Ответить с цитированием
  #6 (permalink)  
Старый 14.02.2012, 18:06
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от poorking
Версия: 8.0.6001.18702
У меня такая же версия, и JSON там всегда был и есть.
Ответить с цитированием
  #7 (permalink)  
Старый 14.02.2012, 18:12
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

devote,
Как вы думаете, почему у меня его нет? Я использую библиотеку, потому что он реально нужен, но его не было тогда и нет сейчас. Попробую переустановить IE чтоли, у меня Win ХР pro на этом компе, тут нет его, дома на win7 проверю его существование
__________________
readOnly
Ответить с цитированием
  #8 (permalink)  
Старый 14.02.2012, 18:12
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от devote
У меня такая же версия, и JSON там всегда был и есть.
Не всегда, в зависимости от doctype и режима совместимости его может не быть.
Ответить с цитированием
  #9 (permalink)  
Старый 14.02.2012, 18:13
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от poorking
у меня Win ХР pro на этом компе
Я тоже тестю на Win XP Pro, и всегда был и есть объект JSON, видимо что-то у вас отвалилось в ИЕ либо хз... Но в ИЕ8 он всегда был
Ответить с цитированием
  #10 (permalink)  
Старый 14.02.2012, 18:15
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Kolyaj
в зависимости от doctype
Ну это вряд ли, без доктайпа он есть, и с ними тоже... а вот насчет:
Сообщение от Kolyaj
режима совместимости его может не быть.
вполне возможно что кнопочку отжать забыли с режима совместимости под ИЕ7
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ExtJS theming в IE8!? JDev ExtJS 0 05.01.2012 15:56
window.resizeTo(w,h) в ie8 задёт не те размеры. mister_maxim Internet Explorer 1 29.07.2011 22:51
Как отключить режим совместимости в IE8? kidar2 Internet Explorer 2 25.06.2011 16:45
<= IE8 memory leak, IE9 - fine AbNormy Internet Explorer 1 20.05.2011 19:47
Как обработать изменение масштаба окна в IE8 ? v_k Events/DOM/Window 1 09.08.2010 13:35