AJAX просто означает, что вы передаете данные асинхронно по HTTP с помощью вызова JavaScript. Таким образом, ваш скрипт выполняет «нормальный» HTTP-запрос с использованием объекта XmlHttpRequest (). Однако, как следует из названия, он действительно подходит только для текстовых форматов данных, поскольку вы обычно хотите выполнить какое-либо действие на стороне клиента с данными, которые вы вернули с сервера (хотя не всегда, иногда люди просто отправляют запросы XmlHttpRequest только обновить что-нибудь на сервере).
Кстати, я никогда не видел приложения, в котором в любом случае была бы целесообразна отправка двоичных данных.
Чаще всего люди предпочитают отправлять данные на сервер с помощью POST или GET (это в основном метод для передачи пар имя-значение, свойственных HTTP). Для отправки более сложных данных, например, иерархических структур, их необходимо каким-то образом кодировать. XML-документы могут создаваться непосредственно для JavaScript, отправляться на сервер и анализироваться в любых необходимых типах данных. Но поскольку XML может быть немного болезненным, многие разработчики используют вместо этого данные в кодировке JSON, потому что их легко генерировать и легко анализировать.
То, что сервер отправляет обратно, также произвольно. Обычно вы указываете функцию обратного вызова в вашем Javascript, которая обрабатывает входящие данные. Опять же, популярными вариантами являются XML и JSON, они легко разбираются в объект документа или структуру массива соответственно. Вы также можете отправить простой текст или другую упаковку, но помните, что вам придется позаботиться о том, чтобы извлечь из него полезные данные самостоятельно. Иногда также может быть полезно отправлять фактические фрагменты HTML клиенту для непосредственного обновления чего-либо на странице.
Для начала, я предлагаю вам взглянуть на JQuery. Это очень легкий фреймворк, который абстрагирует множество злых вещей, связанных с совместимостью, и позволяет очень красиво писать запросы AJAX.