Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Проблемы с Ajax + не могу авторизоваться

00 голосов
4
Как-то не заладилось с утра:

1) Содержимое включаемой области:

Код
<?
   include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/include.php");
   include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/public_tools.php");
?>
<script  type="text/javascript">
      

   var xmlHttp = false;
      /*@cc_on @*/
      /*@if (@_jscript_version >= 5)
      try {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e2) {
         xmlHttp = false;
        }
      }
      @end @*/

      if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
        xmlHttp = new XMLHttpRequest();
      }
   
   

   function updateservices(){
      

      if (xmlHttp.readyState == 4){
         
         services = document.getElementById("services");
                  services.innerHTML = xmlHttp.responseText;
         
        }
   
   
   }
   
   
   
   function setservice(){
      
      var type = document.getElementById("servicetype").value;
      
      
      if ((type == null) || (type == "")) return;

        var url = "ajax.php?SECTION_ID=" + escape(type);
      
        xmlHttp.open("GET", url, false);
      
        xmlHttp.onreadystatechange = updateservices;

        xmlHttp.send(null);
      
    }

 
 

   
</script>
<form action="">
   <select name="servicetype" onchange="setservice();" id="servicetype">

    
   <?
      $rsIblock = GetIBlockList("Services", Array("servicetype"));
      $arIblock = $rsIblock->Fetch();
      
      $rsSection = GetIBlockSectionList($arIblock["ID"], false, Array("SORT"=>"DESC", "NAME"=>"DESC"));
      
      while ($arSection = $rsSection->Fetch())
      {
         echo "<option value=\"".$arSection["ID"]."\">".$arSection["NAME"]."</option>\n";
      }
      $rsIblock = GetIBlockList("Services", Array("addservices"));
      $arIblock = $rsIblock->Fetch();
   
      $rsSection = GetIBlockSectionList($arIblock["ID"], false, Array("SORT"=>"DESC", "NAME"=>"DESC"));
   
      while ($arSection = $rsSection->Fetch())
      {
         echo "<option value=\"".$arSection["ID"]."\" >".$arSection["NAME"]."</option>\n";
      }   
   
   ?>      
   </select>
   <select name="servicetype"  id="services">
      
   </select>

</form>


нужно, чтоб по выбору значения в первом селекте, подгружались варианты во второй (двольно стандартная задача)

вот собственно вызываемый скрипт

Код
ajax.php

<?
     require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); // первый общий пролог

   require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/include.php"); // инициализация модуля
   require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/prolog.php"); // пролог модуля
   
   
   
   $APPLICATION->RestartBuffer(); 
   
   $html ="";
   
   
    $arSelect = Array();
   $arFilter = Array("SECTION_ID"=>$_GET["SECTION_ID"]);
   $res = CIBlockElement::GetList( Array("sort"=>"asc"), $arFilter, false, false, $arSelect );                           
   while($ob = $res->GetNextElement()){
      $arFields = $ob->GetFields();
      $html.= "<option value=\"".$arFields["ID"]."\">".$arFields["NAME"]."</option>";
   } 
   
   echo $html;
   die(); 
?>



в соответствии с рекомендацией: http://dev.1c-bitrix.ru/community/blogs/cookbook/197.php вызывается $APPLICATION->RestartBuffer(); , но скрипт в БУСе ведет себя все равно, как хочет

Т.е. если в мозилле обратиться, как http://localhost:6448/ajax.php?SECTION_ID=14 , он выводит какие-то <html><body>... - откуда? О_о
спросил 07 Янв, 14 от Taur (140 баллов)

4 Ответы

00 голосов
пароль сбросил методом из FAQ - судя по тому, что вопрос уже в FAQ данный глюк довольно популярен :evil:
ответил 15 Апр, 14 от Taur (140 баллов)
00 голосов
вмето $APPLICATION->RestartBuffer(); просто в начале подключите
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
ответил 09 Авг, 14 от ioannes (540 баллов)
00 голосов
в сердцах решил использовать битриксовские функции (по приведенному кукбуку) - вроде заработало...
Правда такой момент: возвращаемые данные оказывались в UTF, поэтому в .htaccess необходимо было добавить AddDefaultCharset windows-1251, об этом в кукбуке почему-то умалчивается, как и умалчивается о возможных проблемах непосредственного использования XMLHttpRequest...

Николай Гросу, спасибо, учту на след. раз.
ответил 13 Дек, 14 от Taur (140 баллов)
00 голосов
честно, это уже начинает раздражать...

вставил в форму свои подгружаемые поля, вставил календарь и часы (станд. компоненты) - после первого сабмита, кнопка отправки формы становится кликабельной только в верхнем левом углу О_о... если убрать ajax из формы - все работает гуд
ответил 04 Апр, 15 от Taur (140 баллов)

Похожие вопросы

0 голосов
1 ответ
спросил 08 Окт, 20 от аноним
0 голосов
1 ответ
спросил 23 Июль, 15 от Demich (120 баллов)
+1 голос
2 ответов
0 голосов
2 ответов
спросил 19 Апр, 14 от Scorpiobe (100 баллов)