Jquery - предотвращает «укладку» запросов ajax - PullRequest
0 голосов
/ 09 октября 2010

Хорошо, есть два пути.Один - со стороны представления, а другой - со стороны «обработки».

Сейчас у меня настроена таблица данных.Определенные действия (ввод поискового запроса, нажатие другого номера страницы и т. Д.) Запускают функцию с именем refreshData()

refreshData() первые вызовы showOverlay(), которая исчезает в оверлее с загрузкой.образ.Затем он $.post() запрашивает некоторые данные JSON.Затем с успехом он вызывает hideOverlay(), что приводит к исчезновению наложения.

function refreshData()
    {
        showOverlay();
        var parameters = {'page' : '1', 'per-page' : '5'};
        $.post(updateUrl, parameters,
            function(data){
                $('#data-container table tbody').empty();
                $.each(data.users, function(i, user){
                    $('#data-container table tbody').append('<tr>'+
                    '<td>'+ user.name +'</td>'+
                    '<td>'+ user.registered +'</td>'+
                    '<td>'+ user.id +'</td>'+
                    '<td><a href="/users/edit/' + user.id + '">edit</a></td>'+
                    '</tr>'
                    );
                });
                alternateRows();
                hideOverlay();
        }, "json");
    }

Моя первая проблема (презентация) состоит в том, что если refreshData() вызывается повторно, наложение исчезает снова и снова.Он складывается так, что даже если пользователь ничего не делает, он постепенно исчезает, пока не выполнит столько раз, сколько произошло действий.Я бы хотел, чтобы он исчез, только если последний запрос завершен.

Моя вторая проблема (обработка) может даже не иметь значения.Мне интересно, если прежде чем "добавлять" новые элементы в DOM, я должен проверить, есть ли еще новый запрос.Если нет смысла добавлять вещи, просто чтобы удалить их.Это достаточно важно?И если это так, как мне это сделать?

Ответы [ 2 ]

1 голос
/ 09 октября 2010
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

<script>
$(document).ready(function() {
    var timer = 1000; // milliseconds

    var running = false;
    $("#myTextField").keypress(function() {
        if (!running) {
            running = true;

            $.getJSON('object.json', function(data) {
                setTimeout(function() {
                    alert( $("#myTextField").val() );
                    running = false;
                }, timer);
            });
        }
    });
});
</script>
</head>

<body>

<input id="myTextField" type="text" size="100%" />
</body>

</html>
0 голосов
/ 09 октября 2010

Я не знаю, как выглядит ваша функция showOverlay (), но вы можете сделать что-то вроде этого:

function showOverlay()
{
  if($('#overlay :animated').length > 0 || $('#overlay').hasClass('visible'))
  {
      return;
  }
  //Show overlay
}

: анимированный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...