Получение AJAX для .append (данные) с задержкой или очередью - PullRequest
1 голос
/ 11 января 2012

Так что из-за недостатка сна или из-за недопонимания у меня возникли проблемы с тем, чтобы заставить работать код jQuery.

Поэтому, пожалуйста, поделитесь своей единственной надеждой: P

У меня естьФункция jQuery, которая выполняется для элемента onClick = "" attribute

<div id="next" onClick="choice('next', '<? echo $page; ?>')"></div>

По сути, я пытаюсь добиться следующего: заставить элемент исчезнуть, затем вызвать скрипт PHP через AJAX, получить соответствующие данные иданные к ранее скрытому элементу, обсужденному ранее, и затем возвращение указанного элемента в фокус.

Проблема, с которой я сталкиваюсь, заключается в том, что независимо от того, что я делаю (используя .queue или setTimeout) или просто используя стандартныйОчередь 'fx' в jQuery, данные AJAX всегда загружаются как можно скорее, и любая попытка задержки не работает.

Ниже приведен код, заранее благодарю за любую помощь.

function choice(value, page) {
    var timer;
    $.get("http://<? echo ROOT; ?>includes/forms.php", { choice: value, page: page }, function(data) {
        clearTimeout(timer);

        $("#slideOut-inner").fadeOut(2000).empty();

        timer = setTimeout(show, 2200);

        function show() {
            $("#slideOut-inner").append(data).fadeIn(2000); 
        }
    });
}

Ответы [ 2 ]

1 голос
/ 11 января 2012

Попробуйте ввести append() в обратный вызов fadeOut():

$.get("http://<? echo ROOT; ?>includes/forms.php", { choice: value, page: page }, function(data) {
    $("#slideOut-inner").fadeOut(2000, function() {
        $(this).empty()
            .append(data).fadeIn(2000);
    }).empty();
});
1 голос
/ 11 января 2012

Установите задержку вне обратного вызова $ .get, иначе это произойдет только после того, как клиент получит ответ от сервера:

$("#slideOut-inner").fadeOut(2000, function() {
    $(this).empty();
    $.get("http://<? echo ROOT; ?>includes/forms.php", {
        choice: value,
        page: page
    }, function(data) {
        $("#slideOut-inner").append(data).fadeIn(2000);
    });
});
...