2009-12-07 4 views
2

J'ai un formulaire de recherche qui montrent des résultats en direct dans un div spécifié (y regarder Filter results with Jquery)Ajax: attendre X secondes avant que la charge

J'ai modifié le script un peu et maintenant, quand un chèque utilisateur l'un des les cases à cocher les résultats div automatiquement actualiser. La fonction de chargement est gérée par l'événement onChange.

Existe-t-il un moyen d'obtenir ajax le chargement du script de résultat après une heure spécifiée? Par exemple, si je coche une case, le script devrait attendre 2 secondes avant de charger le script. De cette façon, un utilisateur peut cocher, par exemple, 2 ou 3 cases à cocher et lorsqu'il s'arrête pour faire sa sélection ajax chargera le script.

--edit--

L'appel ajax pour le script ne se fait pas par une fonction, c'est le code:

$(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() {}); 
       } 
      }); 
      }); 
     }); 
     }); 

Répondre

0

Vous pouvez utiliser un setTimeout() pour attendre quelques secondes.

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

Vous devrez peut-être vérifier si un délai d'expiration est déjà défini si vous autorisez l'utilisateur à cliquer sur plusieurs cases à cocher. Ceci permet d'éviter plusieurs appels AJAX qui attendent chacun 2 secondes. La logique sera alors:

  1. utilisateur clique
  2. Y at-il un délai d'attente? Si oui, alors ignorer le clic
  3. Else Définir un délai d'attente pour l'appel AJAX
+0

vous voulez faire que 'setTimeout (myAjaxFunction, 2000), ou' il va exécuter immédiatement. (bien sûr, si 'myAjaxFunction' * renvoie * la fonction que vous voulez exécuter, c'est bien) –

+0

@David Merci, j'ai mis à jour la réponse –

1

Essayez d'utiliser setTimeout.

Exemple

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

utiliser la fonction setTimout. Comme si:

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

Cependant, assurez-vous d'attacher un événement pour effacer ce délai d'attente à chaque fois qu'un nouveau bouton est cochée ou bien vous finissez par tirer les Ajax plusieurs fois.

if(timer) { clearTimout(timer); }

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

Questions connexes