Pull to refresh

Comments 43

а почему бы не использовать стандартную функцию $.getJSON?

на сервере (ruby on rails) я пишу вместо render :text — render :json. Думаю, и в других языках такая штука есть.

Использую как правило хеш, например:
response = @object.valid?? {:status => «success», :redirect => true}: {:status => «error», :redirect => false}

И в JS уже обращаюсь к нему как data.status == «success»
Насколько я помню, $.getJSON это просто удобная обертка над $.ajax вызовом, которая устанавливает нужный content-type и может делает еще что-то, так что там видимо тоже будет native parser.
Всё верно, $.getJSON использует $.parseJSON, который, в свою очередь, использует что-то типа window.JSON.parse для браузеров, которые его поддерживают.
Ну да, это тоже самое что и поставить dataType: «json»
а почему бы не использовать стандартную функцию $.getJSON?
а разве статья не об этом? «Если же у вас нет возможности внести изменения в серверные скрипты», все дела.
Думаю, и в других языках такая штука есть.

Вы ошибаетесь. Далеко не во всех. А установка дополнительных библиотек не всегда возможна.
У JSON в стандарте нет одинарных кавычек.
Всё верно, но версия 1.3 допускала использование так называемого malformed JSON, чем многие пользовались. К слову, даже у нас на одном проекте такое, к сожалению, обнаружилось.
Сразу же натолкнулись на эту проблему при переходе на jQuery 1.4.1, интересно то, что на json.org/ в списке библиотек для работы с JSON, конкретно для C#, есть по крайней мере одна библиотека, которая как оказалось, кодирует JSON не по стандартам… В jQuery 1.3.x это было не заметно, заметили только сейчас((
Для чего указывать все возможные пермутации с кавычками и без? Фразы про обязательное использование двойных кавычек как для ключей, так и для значений, для поддержки нативной обработки JSON в современных браузерах, достаточно, на мой взгляд. Здесь подробнее — www.neeraj.name/blog/articles/895-handling-json-parsing-natively-in-jquery-1-4-and-what-changed-from-jquery-1-3
Как временное быстрое решение вполне подходит, тем паче, что в jquery 1.3 оно как-то нормально жило:
// Get the Javascript object, if JSON is used.
if ( type == "json" )
data = window["eval"]("(" + data + ")");
Рекомендуют не использовать параметр 'json', а полученные данные обработать, например, «практически официальным» www.json.org/json2.js
«практически официальный» json парсер так же использует eval для браузеров без поддержки JSON.parse, но он его проверяет, что, конечно, лишним не бывает.
Вообще, излишняя маньячность не всегда оправдана, в jquery очень много вещей, которые можно усложнить-улучшить, но ведь мы её и любим за грамотный баланс :)
ради этого библиотеку в 120 килобайт? дудки!
Нужные функции занимают от силы байт 500 :-)
Ну тогда давайте еще и MooTools и Dojo подключим для полного счастья :)))
вы забыли js фреймворки от yahoo
ой, точно! А то дядька Крокфорд обидется. Так что смело включаем еще и YUI :)
Точно, желательно все метров 5 и подключим :)
Кстати, вот ещё одно:

Если при вызове функции $.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,
});


Теперь все запросы будут отправляться в традиционном виде.
О.О JSON без ковычек? я б за такое руки поотрывал бы разработчикам, может еще в одну строку писать будем? или без табуляции? все к левому бортику!
Простите меня, но я просто по аналогии с объявлением объектов яваскрипта писал
{
  name:"value"
}


В яваскрипте то так можно=)?
Зачем вручную формировать json? Назовите мне язык который сейчас используется активно в веб и в котором нет аналога пхпшного json_encode?
Ну это я для тестов писал, когда серверной части не было, но это не важно

Меня больше интересует легальность этого в яваскрипте, и зачем отличия?
Полугодовалые проекты под php4, например.
есть библиотеки под php4 которые генерят валидных JSON
Ну понятное дело, что есть… Но не у каждого же хостера, разные бывают ситуации =)
эти библиотеки написаны на php (это скрипты), так что они работают на 100% хостеров
Конечно можно, поэтому часто и путают.
тогда остался вопрос, зачем отличия?
JSON — это строковое представление объекта. Т.е. это не есть сам объект.
Это да, но
{
  name:"value"
}

тоже строка, написанная мной, просто в джиесе это норм, а если это джейсон, то @taliban предлагал руки оторвать=)
Попробуйте в Хроме выполнить var a = {default: «value»}. Если имя ключа взять в кавычки или назвать как-то иначе, то всё нормально.
Хабрапарсер ёлочек наставил, я не виноват. :)
можно много чего, но стандарт есть стандарт, кстати Javascript позволяет все писать в одну строку, или в одну колонку… почему не пишете так? позволяет ведь
кстати JSON считается в данный момент языко-независимым, а такие записи другие языки не возьмут, да и вообще советую создавать JSON структуры встроенными средствами серверных языков, т.к. не стоит считать себя умней машины, она все сделает правильно, а людям свойственно ошибаться и тупить
Я в одном из проектов сделал проще — переопределил функцию

$.getJSON =…

через выполнение eval. Естественно, это лишь костыль, позже ликвидирую.
Буквально сегодня часов 7 назад разбирался с этим ньюансом. Прочитал статью habrahabr.ru/blogs/jquery/42426/, взял пример оттуда — не работает! Повертел так-сяк, залез на www.json.org/, а там уже все четко расписано. Дальше без проблем.

Мысли людей точно витают в едином поле и часто пересекаются. =)
pgSQL стал жёстче следить за кавычками в 8.4. вот и Jquery 1.4 подтянулся… Радуют тенденцией :)
С выходом Chrome 14 внутри расширений eval использовать не получится, пишет «Code generation from strings disallowed for this context».
Sign up to leave a comment.

Articles