Подгрузка элементов в Bitrix на AJAX. Особенность передачи $arParams

Запись от 03.09.2014
Обычный компонент "Элементы раздела" должен по нажатию "Показать ещё" подгрузить следующую партию элементов.
Поскольку, новые элементы должны быть загружены таким же компонентом, с такими же параметрами, то и передавать их было решено через AJAX. В таком случае, если изменятся параметры компонента, то они, автоматически отразятся и на подгружаемых элементах.

Передавать массив параметров было решено с помощью json - вроде бы, логичный вариант, и плюс ко всему зашифровать и сжать - так и компактнее и безопаснее:
var arParams = '<?=base64_encode(gzcompress(json_encode($arParams)))?>';

И такой массив передавался в php-скрипт вызываемый AJAX-ом, да только компонент не вернет ничего, т.к. некоторые (!) значения параметров типа "Y" и "N" преобразуются в true и false, а компонент эти значения в качестве входных параметров не принимает, поэтому получилась такая конструкция:
$arParamsClear = Array();
foreach($arParams as $key=>$val) {
   if(strstr($key, "~") === false) {
      if($val === true) {
         $val = 'Y';
      } elseif ($val === false) {
         $val = 'N';
      } 

      $arParamsClear[$key] = $val;
   }
}  
...  
<sc ript type="text/javascript"> 
...
   var arParams = '<?=base64_encode(gzcompress(json_encode($arParamsClear)))?>';

И вот такой массив параметров, после расшифровки компонент уже примет:
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); 
$arParams = (array) json_decode(gzuncompress(base64_decode($_REQUEST['arParams']))); 
?>  
 
<?$APPLICATION->IncludeComponent(
   "bitrix:catalog.section",
   "xxx",
   $arParams
);?>