Проблема с двойной задержкой jQuery () - PullRequest
5 голосов
/ 09 мая 2011

Я возился с функциями JJuery AJAX и пытался смоделировать, как реальный сервер будет задерживать сглаженные в противном случае запросы данных, которые я получаю на локальном хосте.

Итак, я написал код, похожий на этот:

$('form').submit(function (event) {
    event.preventDefault();

$('#response').html('<p>Posting...</p>').fadeIn().delay(2000).queue(function () {
        $.post (
        'some_url.php', 
        {/*values here*/},
        function (response) {
            $('#response').html(response).delay(1000).fadeOut('slow');

            //The line below is to reset the form element
            $('input[type="text"], textarea').val(' ');
        });
    });
});

В основном я делаю так, что я задерживаю метод $ .post на 2 секунды, чтобы "Posting ..."сообщение может быть видно. Когда 2 секунды закончились, я хочу, чтобы текст был изменен с ответом, который я получил, оставался на месте в течение 1 секунды, и я хочу, чтобы он исчезал.

Первая задержка работает отлично, такжевызов Ajax работает отлично, проблема в том, что по какой-то причине вторая задержка не читается, а ответное сообщение, когда-то показанное, отказывается исчезать:)

Мой вопрос: почему это происходит и как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Вам необходимо снять очередь, чтобы обработать следующую вещь в очереди.

http://api.jquery.com/jQuery.dequeue/

РЕДАКТИРОВАТЬ: Или next в версии 1.4 или выше:

В jQuery 1.4 вызываемая функция передается в другой функции в качестве первого аргумента, которая при вызове автоматически удаляет следующий элемент и поддерживает движение очереди.Вы бы использовали его так:

$("#test").queue(function(next) {
     // Do some stuff...
     next(); 
});

от: http://api.jquery.com/queue/

0 голосов
/ 09 мая 2011

Вы можете попробовать мой плагин waitForIt:

http://jsfiddle.net/maniator/Ad3pv/

все, что вам нужно сделать во второй части:

$('#response').html(response).waitForit({
    function: 'fadeOut',
    options: 'slow',
    timeOut: 1000
});
...