Помогите с Ajax в DLE

R
На сайте с 13.06.2009
Offline
47
1922

Собственно ни как не получается прикрутить Ajax к моду.

Вот такой код (нашел где-то на этом форуме)



<script type="text/javascript" src="engine/ajax/dle_ajax.js"></script>
<script type="text/javascript">
var ajax = new dle_ajax();

function Completed(){
document.getElementById( 'status' ).innerHTML = '<font color="green">действие выполнено</font>';
}


function autoadd( startfrom ){

document.getElementById( 'status' ).innerHTML = 'выполнение ...';

ajax.requestFile = "engine/inc/mod.php";
ajax.method = 'POST';
ajax.element = 'rez';
var varsString = "startfrom=" + startfrom;

ajax.onCompletion = Completed;
ajax.sendAJAX(varsString);

return false;
}
</script>

<div id="status"></div>

<form method="post">
<textarea class="edit" id ="test" rows="8" cols="100" name="test"></textarea>
<input type="button" class="bbcodes" value=" Выполнить " onClick="autoadd('проверка')" />
</form>
<div id="rez"></div>



if (!(defined ('DATALIFEENGINE'))){
exit ('Hacking attempt!');
}

if ($_REQUEST['action'] != ''){
$action = $_REQUEST['action'];
}
else{
$action = '';
}


if ($_REQUEST['subaction'] != ''){
$subaction = $_REQUEST['subaction'];
}
else{
$subaction = '';
}


if ($action == 'channel' AND $subaction == 'testtem')
{
$test = $_POST['test'];
echo $test;

}

Вобщем запрос уходит, но в ответ приходит "Hacking attempt!".

И вобще не понимаю как поймать данные на стороне PHP, какой ключ будет у $_POST, а также как послать данные для $action и $subaction (я пробовал добавлять в JS это ajax.URLString = "http://data/admin.php?mod=mod&action=channel&subaction=testtem"; - не помогло) в одном запросе (т.е. три переменные за раз).

Подскажите кто проходил подобное, может у кого есть другая функция для этого?

P.S. Это естественно не мод и даже не его отрывок - это просто проверка, того как сделать Ajax запрос и получить результат.

ewg777
На сайте с 04.06.2007
Offline
225
#1

Всё верно он делает.

if (!(defined ('DATALIFEENGINE'))){
exit ('Hacking attempt!');
}
Фтопку
R
На сайте с 13.06.2009
Offline
47
#2

Т.е. нужно то, что будет отвечать за обработку того, что пришлет Ajax выносить в отдельный файл иначе будет эта ошибка всегда?

А как быть со второй проблемой: передать несколько переменных за раз (так вобще можно) и по какому ключу в $_POST потом получить доступ к переданным данным.

recrut добавил 27.01.2010 в 16:01

Все кажется разобрался (по крайней мере до нужного мне уровня).

Вот если кому не то понадобится.

Так можно отправить сразу несколько переменных, а в $_POST они будут под теми же именами, что и в JS.



<script type="text/javascript" src="engine/ajax/dle_ajax.js"></script>
<script type="text/javascript">
var ajax = new dle_ajax();

//Функция бедет выполнятся после получения ответа.
function Completed(){
document.getElementById('status').innerHTML = '<font color="green">действие выполнено</font>';
}

//Основа (в функцию передается две переменных, но можете передать и одну)
function autoadd(startfrom, str){

document.getElementById('status').innerHTML = 'выполнение ...';

ajax.requestFile = "engine/inc/myplagin/testtem.php"; //файл обработчик
ajax.encodeVAR(startfrom); // Это у меня так и не заработало!
ajax.encodeVAR(str);
ajax.method = 'POST';
ajax.element = 'rez'; //В элементе с таким id выведется результат.
var varsString = ""; // Объявление переменно.
ajax.setVar("startfrom", startfrom); // Заполняем переменную которая выше
ajax.setVar("str", str);

ajax.onCompletion = Completed;
ajax.sendAJAX(varsString); //Отправляем и полусаем результат.

return false;
}

Как я написал - ajax.encodeVAR(str); у меня не работает (как я понимаю он должен перекодировать запрос и отправить его в windows-1251)? но он у меня приходит в UTF-8, но да ладно можно его перекодировать с помощью iconv, хотя если кто знает или дойдет до того как заставить ajax.encodeVAR(str); работать, то поделитесь!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий