Существует несколько распространенных форматов общения с сервером.
Рассмотрим
В самом простом случае - ответом на AJAX-запрос является кусок HTML:
<h4>Готово</h4> <p class="notification">Новость опубликована</p>
Этот кусок можно показать пользователю, записав внутрь тага:
domObject.innerHTML = data
Сервер возвращает XML document типа:
<response> <status>Готово</status> <message>Новость опубликована</message> </response>
На клиенте XML может либо анализироваться через javascript, либо преобразовываться XSL-шаблоном типа:
<xsl:template match="/reports/report"> <h4><xsl:value-of select="status"/></h4> <p class="notification"><xsl:value-of select="message"/></p> </xsl:template>
Код на клиенте:
// ... получить XML-ответ в xmlDoc и подготовить XSLT в xslDoc domObject.innerHTML = xmlDoc.transformNode(xslDoc)
На практике, поддержка XSLT в браузерах очень ограничена и различается в деталях. Завязавшись на обработку XML при помощи client-side XSLT, рано или поздно придется все же использовать javascript из-за ограничений XSLT.
Также браузером не поддерживается EXSLT.
Плюсом XSLT является быстрота метода, по сравнению с javascript, но это актуально лишь на больших документах.
Этот формат, как правило, самый оптимальный. Сервер возвращает JavaScript-объект:
{"response":
{"status":"Готово","message":"Новость опубликована"}
}
Чтобы десериализовать объект, клиент просто пропускает текст через встроенный парсер, добавив скобки
var reports = eval( '('+data+')' )
Затем HTML может быть сформирован средствами JavaScript, собственной шаблонной системой и т.п.
domObject.innerHTML = jSmarty.fetch(reportsTemplate)
Конечно же, eval позволяет не только десериализовать JSON-объекты, но и выполнять произвольный JS-код.
Если есть подозрения, что данные с сервера(например, вызов внешнего вебсервиса) могут быть небезопасны, то их можно проверить на соответствие JSON регулярным выражением:
var my_JSON_object =
!(/[^,:{}[]0-9.-+Eaeflnr-u nrt]/.test(data.replace(/"(.|[^"])*"/g, ''))) &&
eval('(' + data + ')')
Надеюсь, будут полезны наблюдения:
Вообще,в разных частях веб-приложения вполне можно использовать несколько форматов. Например:
| Текущий раздел |
| Поиск по сайту |
| Последние темы на форуме |
Forum |
В общем, спасибо за статью - довольно познавательно.
Я давно уже пишу для веб, но только не давно решил разобраться в новых технологиях, и ajax - первая из них (тем более что и так давненько читал про нее)
Да, сайт полезный! Особенно порадовали тесты.
Присоединяюсь к благодарностям!
Нельзя ли осветить еще вариант SOAP?
SOAP - надстройка над XML. Никаких встроенных языковых средств для его обработки нет.. Да и вообще, не популярен он на клиент-сайде...
При выборке-отображении большого количества данных (начиная с десятков записей) XML+XSLT может работать быстрее. Например, это может быть существенно для больших таблиц.
Значит я сделал правельный выбор:)
Статьи прикольные на сайте, но коменты к ним пишет один и тот же чел. Не будем показывать пальцами...
Добавьте, пожалуйста экранирование в регулярку-проверку json, кажется, его порезало.
Помогите, пожалуйста, есть скрипт, который принимает JSON с сервера, сам JSON приходит в таком виде:
[{"id":"1","body":"sometext"},{"id":"2","body":"sometext2"}]
Делаю
JSON.parse(здесь_пришедший_JSON) или eval('('+здесь_пришедший_JSON+')')
И браузер начинает выводить
[object Object],[object Object]
Объясните, пожалуйста, как вставить значения body разных записей в html код? Заранее спасибо!
"[{"id":"1","body":"sometext"},{"id":"2","body":"sometext2"}]"
Попробуй на сервере сформировать массив вида [{"id":"body","id1":"body1" и т.д.}]
и парсь
eval( '(' +request.responseText+ ')' )
Для чего нужны эти скобки?
Без них не работает, но почему?
Всё дело в том, что в JavaScript с фигурной скобки { начинаются и объекты и блоки кода. Если передать в eval объект напрямую, то он подумает, что первая "{" начинает блок кода:
{
"name": "Вася",
"age": 25
}
Выполнение такого кода, конечно, приведёт к ошибке.
А если eval получает выражение в скобках ( ... ), то интерпретатор точно знает, что блока кода внутри быть не может, значит это объект.
Пожалуйста, если не затруднит.
Приведите пример перевода минут в часы, в формате HH:MM на JS.
Для Adobe Acrobat.
Я чайник и впервые столкнулся с подобной задачей.
Огромное спасибо!
Кода!
Решение найдено.
Фигня всё... Работает и без скобок () прекрасно! В принципе пересылать JSON формат можно и без внешних скобок, фигурных или квадратных, только внутренность. Но надо не забывать их перед распарсиванием ставить. Вот в этом случае они обязательны ибо определяют суть! А вообще для Ajax есть вызов AJAX.parse(text).