2010-11-03 11 views
9

J'ai ce code demandant quelques informations de dossier à partir d'un DB mysql:Est-il possible de vérifier timeout sur jQuery.post()?

function gotoDir(pmcat_id, pcat_id){ 
    $('#slideshowContainer').html('<img class="loader" src="/javascript/ajax-loader.gif">'); 
    $.post("/publish/includes/content.includes/functions.slideshow.php", 
     { updateSlideshowDir: 1, pmcat_id: pmcat_id, pcat_id: pcat_id }, 
     function(data){ 
      $('#pageSlideshow').html(data.content); 
     }, "json" 
    ); 
} 

Parfois, les temps de demande de poste à cause de la mauvaise connexion Internet. Est-il possible de définir une vérification de délai d'attente sur $ .post()? Ex: si $ .post() utilise plus de X ms, rechargez la requête.

MISE À JOUR: On dirait que j'ai trouvé une solution:

function gotoDir(pmcat_id, pcat_id){ 
    $('#slideshowContainer').html('<img class="loader" src="/javascript/ajax-loader.gif">'); 
    $.ajax({ 
     type:"post", 
     url:"/publish/includes/content.includes/functions.slideshow.php", 
     data: { updateSlideshowDir: 1, pmcat_id: pmcat_id, pcat_id: pcat_id }, 
     dataType: "json", 
     success:function(data) { 
      if (data == null){ 
      alert('ajax failed. reloading...'); 
      gotoDir(pmcat_id, pcat_id); 
     } else { 
      $('#pageSlideshow').html(data.content); 
     } 
     }   
    }); 
} 

Est-ce une manière OK pour le faire? : S

+1

Non ce n'est pas correct, car si la donnée var est nulle, cela ne signifie pas que la requête a expiré, ce qui provoquerait dans une requête infinie si functions.slideshow.php retourne effectivement null! – ifaour

Répondre

3

Vous devez utiliser $.ajax() et $.ajaxError(), puis avec "ajaxComplete" vous pouvez vérifier si votre demande timedout ou succeded.

Source: jQuery API

29

.ajax de $ a toutes les fonctions dont vous avez besoin pour accomplir ce que vous demandez:

function gotoDir(pmcat_id, pcat_id) { 
    $('#slideshowContainer').html('<img class="loader" src="/javascript/ajax-loader.gif">'); 
    $.ajax({ 
     type: "POST", 
     url: "/publish/includes/content.includes/functions.slideshow.php", 
     data: { updateSlideshowDir: 1, pmcat_id: pmcat_id, pcat_id: pcat_id }, 
     dataType: "json", 
     timeout: 500, // in milliseconds 
     success: function(data) { 
      // process data here 
     }, 
     error: function(request, status, err) { 
      if(status == "timeout") { 
       gotoDir(pmcat_id, pcat_id); 
      } 
     } 
    }); 
} 

S'il vous plaît noter que vous n'avez pas besoin de définir l'option de délai d'attente sauf si vous voulez déclencher la méthode d'erreur après un certain temps voulez définir.

+0

Notez que c'est aussi un bon modèle pour un script côté client longpolling si vous mettez gotoDir() à la réussite aussi :) –