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

jQuery ajax-запросы и права на скрипты битрикс

00 голосов
9
Снова добрый день!

Возникла проблема следующего характера.

Дописываю собственный модуль в административную панель и я хочу использовать jQuery ajax.
сам файл модуля лежит в site.ru/bitrix/modules/my_module/include/file.php
в нем же вызывается скрипт
Код
<script>
jQuery(function($){
  $('.smth').click(function({
  $.ajax({
    type: 'POST',
    url: '/bitrix/modules/my_module/include/file.php',
    data: {smth: 1},
    success: function(){}
    });
  });
)}
</script>


И вот в чем проблема - при клике FireBug выдает мне ответ от скрипта:
http://site.ru/bitrix/modules/my_module/include/file.php 403 Forbidden 22ms

Вынесением функции которая вызывается по smth == 1 в отдельный файл и "складыванием" его, допустим, в корень site.ru/fileAjax.php - проблема решаешься.
Но так делать не хочется совсем.

Может есть еще какие то пути решения?

Спасибо
спросил 27 Апр, 13 от HeJIJIu (630 баллов)

9 Ответы

00 голосов
Начал подозревать, что это связано с тем что в папке /bitrix/modules лежит

.htaccess Deny for All

Как я понимаю, менять его - не выход. Слишком важная папка, чтобы открывать к файлам в ней прямой доступ.

Попробую открыть к /bitrix/modules/my_module/includes
ответил 27 Апр, 13 от HeJIJIu (630 баллов)
00 голосов
Проблем с доступом к скрипту решилась созданием в папке /bitrix/modules/my_module/include/
.htaccess с текстом
Код
Satisfy any 
order allow,deny 
allow from all


Теперь правда возникла другая - скрипт возвращает ошибку

Код
<b>Fatal error</b>:  Class 'CModule' not found in <b>Z:\home\adrenalin77.ru\www\bitrix\modules\jj_tools\include\inc.export.xml.php</b> on line <b>36</b>


Хотя код следующий:
Код
//если пришел ajax-запрос на подгрузку
if (isset($_POST['getElementsList'])) {
   CModule::IncludeModule('iblock');
   echo 'товары';
   exit;
   }
ответил 27 Апр, 13 от HeJIJIu (630 баллов)
00 голосов
Можно попробовать применить битриксовую схему, т.е. файл вынести в корень, например, site.ru/fileAjax.php
А в файле fileAjax.php подключить /bitrix/modules/my_module/include/file.php.
Иначе придется открывать доступ через htaccess
ответил 24 Июнь, 13 от Almarea (3,760 баллов)
00 голосов
Дмитрий Яковенко, спасибо. Как раз через .htacess открыл доступ

а последняя проблема решилась следующим образом:
Код
//если пришел ajax-запрос на подгрузку товаров
if (isset($_POST['getElementsList'])) {
   require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
   CModule::IncludeModule('iblock');
   echo 'товары';
   exit;
   }
ответил 28 Сен, 13 от HeJIJIu (630 баллов)
00 голосов
Подключите пролог:
Код
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
ответил 29 Дек, 13 от Pomnep (13,960 баллов)
00 голосов
Дмитрий Яковенко,
P.S. научите ставить плюсики юзерам тут за дельный совет) лазил по профилям - нигде не нашел
ответил 14 Апр, 14 от HeJIJIu (630 баллов)
00 голосов
Цитата
Евгений Жуков пишет:
Подключите пролог:

Код

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



Опередил вас :)
но все равно спасибо!
ответил 08 Авг, 14 от HeJIJIu (630 баллов)
00 голосов
d4rkolian, жмете на имя слева над аватаркой, попадаете в профиль, там строка голосование - голосуете за человека.
Или ставите плюсик у самого сообщения в теме.

Если решили давать доступ через htaccess, то давайте доступ уже к конкретному файлу, чтобы остальные не пострадали.
ответил 12 Дек, 14 от Almarea (3,760 баллов)
00 голосов
Цитата
Дмитрий Яковенко пишет:
Если решили давать доступ через htaccess, то давайте доступ уже к конкретному файлу, чтобы остальные не пострадали.


Да, этот момент наверно поправлю
ответил 03 Апр, 15 от HeJIJIu (630 баллов)

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

0 голосов
8 ответов
спросил 05 Июль, 13 от An3or (140 баллов)
0 голосов
5 ответов
спросил 27 Май, 13 от Biscuit (160 баллов)
0 голосов
1 ответ
0 голосов
1 ответ
спросил 08 Дек, 16 от аноним