Comments 43
Спaсибо зa пaмятку.
+2
а почему бы не использовать стандартную функцию $.getJSON?
на сервере (ruby on rails) я пишу вместо render :text — render :json. Думаю, и в других языках такая штука есть.
Использую как правило хеш, например:
response = @object.valid?? {:status => «success», :redirect => true}: {:status => «error», :redirect => false}
И в JS уже обращаюсь к нему как data.status == «success»
на сервере (ruby on rails) я пишу вместо render :text — render :json. Думаю, и в других языках такая штука есть.
Использую как правило хеш, например:
response = @object.valid?? {:status => «success», :redirect => true}: {:status => «error», :redirect => false}
И в JS уже обращаюсь к нему как data.status == «success»
-3
Насколько я помню, $.getJSON это просто удобная обертка над $.ajax вызовом, которая устанавливает нужный content-type и может делает еще что-то, так что там видимо тоже будет native parser.
+1
а почему бы не использовать стандартную функцию $.getJSON?а разве статья не об этом? «Если же у вас нет возможности внести изменения в серверные скрипты», все дела.
0
Думаю, и в других языках такая штука есть.
Вы ошибаетесь. Далеко не во всех. А установка дополнительных библиотек не всегда возможна.
0
У JSON в стандарте нет одинарных кавычек.
+2
Всё верно, но версия 1.3 допускала использование так называемого malformed JSON, чем многие пользовались. К слову, даже у нас на одном проекте такое, к сожалению, обнаружилось.
+1
Сразу же натолкнулись на эту проблему при переходе на jQuery 1.4.1, интересно то, что на json.org/ в списке библиотек для работы с JSON, конкретно для C#, есть по крайней мере одна библиотека, которая как оказалось, кодирует JSON не по стандартам… В jQuery 1.3.x это было не заметно, заметили только сейчас((
0
Для чего указывать все возможные пермутации с кавычками и без? Фразы про обязательное использование двойных кавычек как для ключей, так и для значений, для поддержки нативной обработки JSON в современных браузерах, достаточно, на мой взгляд. Здесь подробнее — www.neeraj.name/blog/articles/895-handling-json-parsing-natively-in-jquery-1-4-and-what-changed-from-jquery-1-3
+1
Делать eval не надо, плохой пример.
+1
Как временное быстрое решение вполне подходит, тем паче, что в jquery 1.3 оно как-то нормально жило:
// Get the Javascript object, if JSON is used.
if ( type == "json" )
data = window["eval"]("(" + data + ")");
+1
Рекомендуют не использовать параметр 'json', а полученные данные обработать, например, «практически официальным» www.json.org/json2.js
+1
«практически официальный» json парсер так же использует eval для браузеров без поддержки JSON.parse, но он его проверяет, что, конечно, лишним не бывает.
Вообще, излишняя маньячность не всегда оправдана, в jquery очень много вещей, которые можно усложнить-улучшить, но ведь мы её и любим за грамотный баланс :)
Вообще, излишняя маньячность не всегда оправдана, в jquery очень много вещей, которые можно усложнить-улучшить, но ведь мы её и любим за грамотный баланс :)
0
-4
Кстати, вот ещё одно:
Если при вызове функции $.ajax() не поставить параметр traditional в true, то он будет по-новому собирать строку с запросом к серверу. Например, массив a = [1, 2, 3] будет собран, как a[]=1&a[]=2&a[]=3, а не a=1&a=2&a=3. А объект b = {one: 1; two: 2; three: 3} будет как b[one]=1&b[two]=2&b[three]=3.
У меня по этой причине после перехода на 1.4 перестали нормально работать ajax-запросы. Так что вот.
Если нужно использовать абстракции типа $.getJSON(), можно установить параметр traditional глобально:
Теперь все запросы будут отправляться в традиционном виде.
Если при вызове функции $.ajax() не поставить параметр traditional в true, то он будет по-новому собирать строку с запросом к серверу. Например, массив a = [1, 2, 3] будет собран, как a[]=1&a[]=2&a[]=3, а не a=1&a=2&a=3. А объект b = {one: 1; two: 2; three: 3} будет как b[one]=1&b[two]=2&b[three]=3.
У меня по этой причине после перехода на 1.4 перестали нормально работать ajax-запросы. Так что вот.
Если нужно использовать абстракции типа $.getJSON(), можно установить параметр traditional глобально:
$.ajaxSetup({
traditional: true,
});
Теперь все запросы будут отправляться в традиционном виде.
0
О.О JSON без ковычек? я б за такое руки поотрывал бы разработчикам, может еще в одну строку писать будем? или без табуляции? все к левому бортику!
-2
Простите меня, но я просто по аналогии с объявлением объектов яваскрипта писал
В яваскрипте то так можно=)?
{ name:"value" }
В яваскрипте то так можно=)?
+1
Зачем вручную формировать json? Назовите мне язык который сейчас используется активно в веб и в котором нет аналога пхпшного json_encode?
0
Конечно можно, поэтому часто и путают.
0
Попробуйте в Хроме выполнить var a = {default: «value»}. Если имя ключа взять в кавычки или назвать как-то иначе, то всё нормально.
0
можно много чего, но стандарт есть стандарт, кстати Javascript позволяет все писать в одну строку, или в одну колонку… почему не пишете так? позволяет ведь
0
кстати JSON считается в данный момент языко-независимым, а такие записи другие языки не возьмут, да и вообще советую создавать JSON структуры встроенными средствами серверных языков, т.к. не стоит считать себя умней машины, она все сделает правильно, а людям свойственно ошибаться и тупить
0
Я в одном из проектов сделал проще — переопределил функцию
$.getJSON =…
через выполнение eval. Естественно, это лишь костыль, позже ликвидирую.
$.getJSON =…
через выполнение eval. Естественно, это лишь костыль, позже ликвидирую.
0
Буквально сегодня часов 7 назад разбирался с этим ньюансом. Прочитал статью habrahabr.ru/blogs/jquery/42426/, взял пример оттуда — не работает! Повертел так-сяк, залез на www.json.org/, а там уже все четко расписано. Дальше без проблем.
Мысли людей точно витают в едином поле и часто пересекаются. =)
Мысли людей точно витают в едином поле и часто пересекаются. =)
0
pgSQL стал жёстче следить за кавычками в 8.4. вот и Jquery 1.4 подтянулся… Радуют тенденцией :)
0
С выходом Chrome 14 внутри расширений eval использовать не получится, пишет «Code generation from strings disallowed for this context».
0
Sign up to leave a comment.
jQuery 1.3.x -> 1.4.x и JSON