2010-06-02 4 views
2

J'ai reçu un formulaire contenant plusieurs cases à cocher. Ce formulaire doit être envoyé au serveur pour recevoir les résultats appropriés d'un script côté serveur.JQuery-AJAX: Aucune autre requête après le délai d'attente et le délai dans le formulaire

Cela fonctionne déjà.

Ce que j'obtenir maintenant:

1) La mise en œuvre d'un délai d'attente: déjà travailler, mais dès qu'un délai d'attente se produit, une nouvelle demande ne fonctionne plus.

2) Implémentation d'un délai dans la demande de résultats: Un délai doit être implémenté de manière à ce que toutes les cases ne génèrent pas de requête POST.

C'est ce que j'ai en ce moment:

function update_listing() { 

    // remove postings from table 
    $('.tbl tbody').children('tr').remove(); 

    // get the results through AJAX 
    $.ajax({ 
        type: "POST", 
        url: "http://localhost/hr/index.php/listing/ajax_csv", 
        data: $("#listing_form").serialize(), 
        timeout: 5000, 
        success: function(data) { 
            $(".tbl tbody").append(data); 
           }, 
        error: function(objAJAXRequest, strError) { 
            $(".tbl tbody").append("<tr><td>failed " + strError + "</td></tr>"); 
           } 
        }); 

    return true; 

} 

Les résultats sont pour l'instant passé sous forme de lignes de table HTML - je les transformer au format CSV/JSON dans l'étape suivante.

Merci beaucoup pour vos conseils.

Répondre

2

du retard:

(function() { 

var timeout; 

function update_listing() { 

    // remove postings from table 
    clearTimeout(timeout); 
    timeout = setTimeout(function() { 

    $('.tbl tbody').children('tr').remove(); 

    // get the results through AJAX 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost/hr/index.php/listing/ajax_csv", 
     data: $("#listing_form").serialize(), 
     timeout: 5000, 
     success: function(data) { 
      $(".tbl tbody").append(data); 
     }, 
     error: function(objAJAXRequest, strError) { 
      $(".tbl tbody").append("<tr><td>failed " + strError + "</td></tr>"); 
     } 
    }); 

    }, 1000); // 1 second?  

    return true; 

} 
}()); 

Cela attendra une seconde jusqu'à faire la demande AJAX. Que voulez-vous dire par rapport à "dès qu'un délai expire, une nouvelle demande ne fonctionne plus.". Si vous voulez déclencher une autre requête en cas d'échec, appelez à nouveau update_list() (mais notez que le délai de 1 seconde sera effectif).

+0

Merci Matt, le délai d'attente fonctionne très bien. En ce qui concerne 1): Tant que le timeout (AJAX) n'est pas déclenché, tout fonctionne comme prévu, mais dès que la requête est annulée, toutes les requêtes post-commandes suivantes sont immédiatement annulées (plus aucune seule n'est exécutée). – Nogga

Questions connexes