@Yura0103

Как заполнить AJAX запросом (1С Битрикс)?

Зада заключается в следующем. Нужно сделать 2 select (второй зависит от выбранного значения в первом).
Первый я заполняю следующим образом.
<?
$arFilter = array('IBLOCK_ID' => 13, 'ACTIVE'=>"Y", 'SECTION_ID'=>''); 
$arSelect = array('IBLOCK_ID', 'ID', 'NAME','CODE');
$rsSect = CIBlockSection::GetList(
     Array("SORT"=>"ASC"), 
     $arFilter, 
     false, 
     $arSelect 
);?>
<select name="marka_avto" id="marka_avto">
	<?while ($arSect = $rsSect->GetNext()) {
	array_push($array_marka_avto, $arSect["ID"]);?>
	<option value="<?=$arSect["ID"]?>"><?=$arSect["NAME"]?></option>
	<?}?>
</select>

По логике нужно на сервер отправить выбранное значение в SELECT и в ответ получить набор данных для заполнения второго SELECT. С AJAX дел ранее не имел
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
@5465
Чтобы отправить AJAX-запрос на сервер в 1С Битрикс, можно использовать функцию BX.ajax, которая предоставляется фреймворком. Например, можно использовать следующий код, чтобы отправить запрос после изменения первого select:

BX.ready(function(){
  BX.bind(BX('marka_avto'), 'change', function() {
    var marka_avto = BX('marka_avto').value;
    BX.ajax({
      url: '/ajax/get_models.php', // путь к файлу, который будет обрабатывать запрос
      method: 'POST',
      data: {'marka_avto': marka_avto}, // данные, которые будут отправлены на сервер
      dataType: 'json', // ожидаемый тип данных в ответе
      onsuccess: function(data) {
        // здесь обрабатываем полученный ответ
        var modelsSelect = BX('models');
        modelsSelect.innerHTML = ''; // очищаем select
        data.forEach(function(model) {
          var option = new Option(model.NAME, model.ID);
          modelsSelect.add(option); // добавляем option в select
        });
      }
    });
  });
});


Здесь BX('marka_avto').value получает значение выбранного option в первом select. Далее отправляется AJAX-запрос на сервер, в котором передается выбранное значение как параметр marka_avto. В ответ на запрос сервер должен вернуть массив объектов в формате JSON, каждый из которых содержит ID и NAME для второго select. После получения ответа select с ID "models" заполняется новыми option в соответствии с данными, полученными из ответа.

В файле "/ajax/get_models.php" необходимо написать код, который будет обрабатывать запрос и возвращать нужный ответ. Например, можно использовать следующий код:

<?php
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

$marka_avto = intval($_POST['marka_avto']);

// запрос на получение моделей для выбранной марки авто
$arFilter = array('IBLOCK_ID' => 13, 'ACTIVE'=>"Y", 'SECTION_ID'=>$marka_avto); 
$arSelect = array('IBLOCK_ID', 'ID', 'NAME','CODE');
$rsSect = CIBlockSection::GetList(Array("SORT"=>"ASC"), $arFilter, false, $arSelect);

$result = array();
while ($arSect = $rsSect->GetNext()) {
  $result[] = array('ID' => $arSect['ID'], 'NAME' => $arSect['NAME']);
}

echo json_encode($result);
?>


Здесь после получения значения параметра marka_avto выполняется запрос на получение моделей из базы данных и формируется массив $result с данными для заполнения второго select. После этого массив преобразуется в JSON и отправляется в ответ на AJAX-запрос.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы