Помощь Передача данных между блоками

Тема в разделе "DLE", создана пользователем likarek, 2 фев 2010.

Информация :
Актуальная версия DataLife Engine 11.2
( Final Release v.11.2 | Скачать DataLife Engine | Скачать 11.2 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 11.1 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Статус темы:
Закрыта.
Модераторы: killoff
  1. likarek

    likarek Создатель

    Регистр.:
    21 фев 2009
    Сообщения:
    14
    Симпатии:
    0
    Пишу модуль на AJAX'се и сталкнулся с проблемой, вот кусок кода
    PHP:
    $ajax_script = <<<HTML
    <script language="javascript" type="text/javascript">
    <!--
    function do( event ){
        var ajax = new dle_ajax();
        var varsString = "";
            ajax.setVar("name", "
    $name" );
        ajax.setVar("text", "
    $text" );
        ajax.setVar("action", event);
        ajax.requestFile = dle_root + "engine/ajax/modul.php";
        ajax.method = 'GET';
        ajax.element = 'layer';
        ajax.sendAJAX(varsString);
    }
    //-->
    </script>
    HTML;
    // ... кусок пропущен ... //
    if( $_REQUEST['action'] == "menu" ) {
    $main "<form method=\"post\" action=\"\">
    <div>Имя<br /><input type=\"Text\" name=\"name\" value=\"\"> </div>
    <div>Сообщение<br /><textarea type=\"Text\" name=\"text\"></textarea></div>
    <div><input onclick=\"do('results'); return false;\" name=\"send\" type=\"submit\" value=\"Отправить\" /></div></form>"
    ;
    } elseif( 
    $_REQUEST['action'] == "results" ) {
    $main "Вам пришло письмо<br /> Отправитель: $name<br /> Сообщение:<br />$text";
    }
    немогу передать данные из блока 'menu' в блок 'results' пытался так но возвращаем 0
    PHP:
    if( isset( $_REQUEST['name'] ) ) $name intval$_REQUEST['name'] );
    if( isset( 
    $_REQUEST['text'] ) ) $text intval$_REQUEST['text'] );
    Подскажите в чем ошибка, каким образом можно передать данные из блока в блок
     
  2. Bobrov

    Bobrov Постоялец

    Регистр.:
    7 авг 2008
    Сообщения:
    145
    Симпатии:
    13
    А ты проверил у тебя данные разьве передаются, я думаю тебе нужно не так
    if( isset( $_REQUEST['name'] ) ) $name = intval( $_REQUEST['name'] );
    if( isset( $_REQUEST['text'] ) ) $text = intval( $_REQUEST['text'] );
    А через $_POST тянуть. то бишь данные у тебя из фомы уходят массивом post
     
  3. likarek

    likarek Создатель

    Регистр.:
    21 фев 2009
    Сообщения:
    14
    Симпатии:
    0
    пробовал и так, не помогло. :(
    межет я неправильно составляю запросы, как их делать правильно?
     
  4. Darksider

    Darksider

    Регистр.:
    15 мар 2007
    Сообщения:
    314
    Симпатии:
    109
    Я бы сделал так:

    HTML:
    $ajax_script = <<<HTML 
    <script language="javascript" type="text/javascript"> 
    <!-- 
    function do( event ){ 
    
    	var form = document.getElementById('myform');
        var ajax = new dle_ajax();
    	ajax.onShow ('');
    	var varsString = "";
    	ajax.setVar("name", ajax.encodeVAR(form.name.value));
            ajax.setVar("text", ajax.encodeVAR(form.text.value));
            ajax.setVar("action", event); 
    	ajax.requestFile = dle_root + "engine/ajax/modul.php";
    	ajax.method = 'POST';
    	ajax.execute = true;
    	ajax.element = 'layer';
    	ajax.sendAJAX(varsString);
    		return false;
    } 
    //--> 
    </script> 
    HTML; 
    // ... кусок пропущен ... // 
    if( $_REQUEST['action'] == "menu" ) { 
    $main = "<form method=\"post\" action=\"\"  id=\"myform\"> 
    <div>Имя<br /><input type=\"Text\" name=\"name\" value=\"\"> </div> 
    <div>Сообщение<br /><textarea type=\"Text\" name=\"text\"></textarea></div> 
    <div><input onclick=\"do('results'); return false;\" name=\"send\" type=\"submit\" value=\"Отправить\" /></div></form>"; 
    } elseif( $_REQUEST['action'] == "results" ) { 
    $main = "Вам пришло письмо<br /> Отправитель: $name<br /> Сообщение:<br />$text"; 
    } 
    И в engine/ajax/modul.php массивом $_POST Потом лови что хочешь...
     
    likarek нравится это.
  5. likarek

    likarek Создатель

    Регистр.:
    21 фев 2009
    Сообщения:
    14
    Симпатии:
    0
    Спасибо Darksider, код работает ну ура, но вот возник вопрос каким образом можно задать время выполнения запроса, к примеру мне надо чтобы он обновился через 1,5 секунды
     
  6. YuGiN

    YuGiN

    Регистр.:
    17 апр 2007
    Сообщения:
    280
    Симпатии:
    81
    А что за модуль?:-]
    Не поделитесь как доделаете?
     
  7. Bobrov

    Bobrov Постоялец

    Регистр.:
    7 авг 2008
    Сообщения:
    145
    Симпатии:
    13
    Вот тут есть опсаность если сделать через тайм аут, то можно подвесить особенно если где-то есть запрос в бузу данных. Мне кажется нужно к событию привязываться, то есть не просто так функцию гонять, по времени.
     
  8. likarek

    likarek Создатель

    Регистр.:
    21 фев 2009
    Сообщения:
    14
    Симпатии:
    0
    т.е. как к событию? вот например я нажимаю отправить и выполняется скрипт который длится 1,5 сек.
    в dle есть аякс, по умолчанию загрузку видно в центре страницы (загрузка плз подождите), если в функцию моего перехода вставить
    PHP:
    function do( event ){ 
    document.getElementById("loading").innerHTML '<img src="loading.gif" />';
    // предыдущий пример

    то тогда пока идет выполние следующего действия выполняется этот "loading", но все дело в том что выполняется "слишком" быстро видно тока "мерцание" моей загрузки, так вот как сделить чтобы он грузился дольше?может можно как то сделать не прибегая к дополнительным библиотекам типа jQuery, а то из за одной загрузки не рационально использовать к ним
     
  9. Darksider

    Darksider

    Регистр.:
    15 мар 2007
    Сообщения:
    314
    Симпатии:
    109
    Даже не знаешь что за модуль,а уже просишь поделиться... я фигееею.... вот до чего дожили...
    По делу:

    Для обновления бери функцию setInterval, вот наваял скрипт по бырому, посмотри че как:
    HTML:
    <script type="text/javascript">
    function autoupd() {
      do('results'); return false;
    }
    setInterval(autoupd, 1000)
    </script>
     
  10. likarek

    likarek Создатель

    Регистр.:
    21 фев 2009
    Сообщения:
    14
    Симпатии:
    0
    Халявщики, лишь бы что нибудь... что с ними поделаешь...


    Что касается функции setInterval, так и непонял как ей воспользовать :( делал по примеру в результате или блок сам обновляется без участвия пользователя, или при нажатии на кнопку думает заданное время потом тупо перебрасывает на главную.

    ее как нибудь можно вставить именно в эту функцию?

    HTML:
    
    function do( event ){ 
    	var form = document.getElementById('myform');
    	var ajax = new dle_ajax();
    	ajax.onShow ('');
    	var varsString = "";
    	ajax.setVar("name", ajax.encodeVAR(form.name.value));
    	ajax.setVar("text", ajax.encodeVAR(form.text.value));
    	ajax.setVar("action", event); 
    	ajax.requestFile = dle_root + "engine/ajax/modul.php";
    	ajax.method = 'POST';
    	ajax.execute = true;
    	ajax.element = 'layer';
    	ajax.sendAJAX(varsString);
    	return false;
    } 
    
     
Статус темы:
Закрыта.