Битрикс AJAX [bitrix-ajax-api]

Почему-то многие не охотно используют битриксовую библиотеку аякса, почти всегда делая предпочтения в сторону Jquery или других js библиотек. Не сомненно что Jquery очень не плохая библиотека и отлично работает с ajax, но чтобы свободно разрабатывать сайты не 1с-Битрикс надо знать родное API.

Пост для новичков, думаю будет полезно. Рассматриваем только ajax-овую часть библиотеки, ее основу.

Итак начнем с простого примера. Сделаем простую отправку запроса и получение ответа.

html будет выглядеть так
<a href=’#’ onclick=’goAjax(); return false;’>Go</a>

<div id=’container’></div> — сюда мы получим ответ

Теперь нам нужно создать страницу к которой мы будем обращаться, назовем ее ajax.heandler.php. В нем пишем

header(‘Content-Type: text/html; charset=windows-1251’);
require_once($_SERVER[‘DOCUMENT_ROOT’].’/bitrix/modules/main/include/prolog_before.php’);
CModule::IncludeModule(‘iblock’); — если нужно работать с инфоблоками то обязательно подключаем модуль, для остальных модулей тоже самое

Думаю тут все понятно, сюда еще можно добавить константу отключения статистики сайта

define("STOP_STATISTICS", true);

Чтобы аяксовые запросы не считались в модуле, если он у вас есть конечно.

Теперь собственно сам JS

Подключаем саму клинскую библиотеку CAjax::Init()

Основной код для работы с аякс:

function fvoid(data)
{
jsAjaxUtil.CloseLocalWaitWindow();
document.getElementById('container').innerHTML = data;
}

jsAjaxUtil.ShowLocalWaitWindow();
var TID = CPHttpRequest.InitThread();
CPHttpRequest.SetAction(TID, fvoid);
CPHttpRequest.Send(TID, 'ajax.heandler.php', {'param':'test_param'});

Рассмотрим подробнее

CPHttpRequest.Send(TID, 'ajax.heandler.php', {'param':'test_param'}); - собственно и делает сам запрос, 
1) параметр это идентификатор аякс запроса,
2) путь к странице обработчику,
3) объект в котором можно передать дополнительные параметры

CPHttpRequest.Send - отправка запроса методом $_GET
CPHttpRequest.Post - отправка запроса методом $_POST

Обработчик ответа от сервера

function fvoid(data)
{
KLoad.Close('container');
document.getElementById('container').innerHTML = data;
}

data - вот сюда приходит ответ от сервера, это может быть уже готовый html или json, в общем что надо. С полученным результатом уже можно работать как надо.
jsAjaxUtil.ShowLocalWaitWindow();
jsAjaxUtil.CloseLocalWaitWindow();
 - эти функция скрытия аяксового загрузчика, просто появляется и скрывается картинка имитирующая загрузку данных.

Для теста в файле ajax.heandler.php напишем echo ‘<pre>’, print_r($_GET).'</pre>’; и должны получить ответ в виде массива.

Итак вот функция которая посылает запрос методом $_GET и передает тестовые параметр в наш скрипт:


function goAjax()
{
function fvoid(data)
{
jsAjaxUtil.CloseLocalWaitWindow();
document.getElementById('container').innerHTML = data;
}

jsAjaxUtil.ShowLocalWaitWindow();
var TID = CPHttpRequest.InitThread();
CPHttpRequest.SetAction(TID, fvoid);
CPHttpRequest.Send(TID, 'ajax.heandler.php', {'param':'test_param'});
}

Есть еще несколько удобных и полезных функция для работы с аяксом у битрикса. Это отправка формы, обертка с  автоматическим подключением аяксового индекатора с затенением.

В общем пользоваться библиотекой можно, по крайне мере если изначально не подключили никакой сторонней библиотеки, и много наисано на сайте на чистом js то можно использовать. Если же проект новый, то я все таки советую выбрать фреймворк.

Оф документация в формате pdf по работе с библиотекой

10 thoughts on “Битрикс AJAX [bitrix-ajax-api]

  1. Собсно, после последнего абзаца комментировать уже нечего =) Если тот же самый jquery не у себя хранить, а дергать с гугла, то большая веротяность, что у юзера он в кэше будет, поэтому тормозов не создаст. Комбинировать jquery и аякс битрикса не резон. PHP часть одинаковая будет. Обновляться аякс от битрикса похоже тоже не стремится (если вспомнить, то он появился как раз когда начали массово использовать фреймворки, но теперь отстал)

    1. Да, согласен, только если использую jquery то подключаю с сайта, а не с гугла или еще откуда-нибудь. Думаю так надежнее, мало-ли что со связью, хорошо если в кэше, а если нет?

      Битрикс просто решает ей свои задачи и все, им она по большей части и не надо.

      1. а если нет, то должно работать без аякса :)

    1. Можно, но если нам надо более тщательно контролировать запрос то подойдет код выше. А эта функция всего лишь обертка.

  2. Статья хуйййня! Ничего не понятно, для новичка, пытающимся освоить bitrix-ajax!!! Тем более в версии битрикс 12!

    1. Сударыня, если вам что-то не понятно, то это не значит что это хуйня. Судя по тому что приплели 12 версию, вам до аякса как раком до Китая…

      Статься не рассчитана на таких низкоквалифицированных «специалистов» как вы, нужно хотя бы знать что такое javascript, да и она не актуальна уже по большому счету, jquery рулит.

      1. Статьяна вообще не расчитана, такое ощущение будто её первоклассник перевёл

  3. Хорошая библиотека. Судя по всему, заменить jquery ей можно, причем, не очень трудно. Скажите только, по вашему опыту, блокировка кэширования запроса в этой библиотеки есть? И если да, то всегда ли работает?

Comments are closed.