2009-12-07 1 views
2

У меня есть форма поиска, которые показывают результаты жить в указанном DIV (смотреть на там Filter results with Jquery)Ajax: ждать X секунд до нагрузки

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

Есть ли способ получить ajax загрузку результата после определенного времени?

Например, если я выбираю один флажок, сценарий должен ждать 2 секунды перед загрузкой скрипта. Таким образом, пользователь может проверить, например, 2 или 3 флажка, и когда он остановится, чтобы сделать свой выбор, ajax загрузит скрипт.

--edit--

Аякса вызова для сценария не делается с помощью функции, это код:

$(document).ready(function() 
    { 
     $('#category_filter').click(function() 
     { 

      var catArray = new Array(); 
      var j = 0; 
      for(var i = 0; i < <?php echo $categories_count;?>; i++) 
      { 
       if(document.category_filter.filter_id[i].checked == 1) 
       { 
        catArray[j] = document.category_filter.filter_id[i].value; 
        j++; 
       } 
      } 
if(catArray[0]) 
      $.ajax(
      { 
       type: "POST", 
       url:  "index.php?action=ticket-search", 
       data: ({ filter: 'category',filter_id : catArray.toString() }), 
       success: function(msg) 
       { 
        $('#t_content').html(msg) 
           .hide() 
           .fadeIn(700, function() {}); 
       } 
      }); 
      }); 
     }); 
     }); 

ответ

0

Вы можете использовать SetTimeout() вызов ждать несколько секунд.

var t = setTimeout(myAjaxFunction, 2000); //wait two seconds 

Возможно, вам потребуется проверить, установлен ли Тайм-аут, если вы разрешаете пользователю нажимать несколько флажков. Это делается для того, чтобы избежать одновременного вызова нескольких вызовов AJAX в течение 2 секунд. Логика тогда будет:

  1. пользователь щелкает
  2. Есть ли тайм-аут? Если да, то игнорировать щелчок
  3. Else Установите тайм-аут для AJAX позвонить
+0

вы хотите сделать что 'SetTimeout (myAjaxFunction, 2000),' или она будет выполняться немедленно. (конечно, если 'myAjaxFunction' * возвращает * функцию, которую вы хотите выполнить, это нормально) –

+0

@David Спасибо, я обновил ответ –

1

Попробуйте использовать SetTimeout.

Пример

setTimeout("alert('hello')",2000); 
1

Используйте функцию setTimout. Как так:

var timer = setTimeout(yourFunction(), 2000);

Однако, убедитесь, чтобы прикрепить событие, чтобы очистить этот тайм-аут, когда новая кнопка нажата, иначе вы в конечном итоге обжиг Ajax много раз.

if(timer) { clearTimout(timer); }

var timer = setTimeout(yourFunction(), 2000);