Прототип Ajax.Updater не работает правильно с задержкой - PullRequest
0 голосов
/ 15 июня 2009

То, что я получил здесь, - это js-функция Ajax.Updater. Это отлично работает так:

new Ajax.Updater('feedback', 'contact.php', {
    method: 'post',
    parameters: Form.serialize($('contactForm')),
    onFailure: reportError
});

Но я хочу немного затянуть процесс. Я спрашивал про прототип канала IRC, и это похоже на путь:

var feedback = function() {
    new Ajax.Updater('feedback', 'contact.php', {
        method: 'post',
        parameters: Form.serialize($('contactForm')),
        onFailure: reportError
    });

    new Effect.Highlight('feedback', {
        duration: 1
    });
}
feedback.delay(1.5);

(не берите в голову сказочный эффект)

В contact.php есть функция эха, которая выглядит следующим образом:

echo("Thanks for your message $_POST['Name']!");

После применения задержки имя больше не отображается! Что не так?

Ответы [ 4 ]

1 голос
/ 15 июня 2009

Хорошо, последняя попытка на этом. Это работает для меня и делает то, что вы хотите

Мой html-файл

<html>
    <head>
        <title>asd</title>
        <script type="text/javascript" src="src/prototype.js"></script>
        <script type="text/javascript" src="src/scriptaculous.js"></script>
        <script type="text/javascript">
            var feedback = function() {
                var params = Form.serialize($('contactForm'));
                new Ajax.Updater('feedback', 'contact.php', {
                    method: 'post',
                    parameters: params,
                    onFailure: reportError,
                    asynchronous:true
                });

                new Effect.Highlight('feedback', {
                    duration: 1
                });
            }
            function reportError(request) { alert("error");} 

        </script>
    </head>
    <body>
        <form id="contactForm">
            <p>Name:<br><input name="Name" type="text" size="30" maxlength="30"></p>
            <input name="sendbutton" type="button" value="Send" onClick="feedback.delay(1.5);">
        </form>
        <div id="feedback">foo</div>
    </body>
</html>

Мой contact.php

<?php
echo("Thanks for your message ".$_POST['Name']."!");
?>

и использование js-файлов из здесь

0 голосов
/ 02 ноября 2013

Это не относится к первоначальному заданному вопросу - но так как я наткнулся на эту тему в своем поиске. Я решил опубликовать свои результаты.

У меня был какой-то код, вдруг перестало работать средство обновления ajax:

new Ajax.Updater('my_id, 'http://mydomain.com/my_script.php');

Причина, по которой это не помогло мне, потому что я был на www.mydomain.com (в отличие от mydomain.com)

Я просто изменил его на:

new Ajax.Updater('my_id, 'my_script.php');

и все работало нормально.

0 голосов
/ 15 июня 2009

Я еще раз попробую.

Изменение

echo("Thanks for your message $_POST['Name']!");

до

echo("Thanks for your message ".$_POST['Name']."!");

и попробуйте снова.

И убедитесь, что вы реализовали функцию reportError, которую вы передаете здесь

onFailure: reportError

, например

function reportError(request){alert('Shit happens!');}
0 голосов
/ 15 июня 2009

Почему бы вам просто не обернуть эту вещь в вызов setTimeOut . Таким образом, задержка запроса AJAX вместо задержки отображения. Что, между прочим, делает функция задержки прототипа

Но

new Ajax.Updater.delay(2, 'feedback', 'contact.php', {
    method: 'post',
    parameters: Form.serialize($('contactForm')),
    onFailure: reportError
});

также должно работать

...