2010-11-03 6 views
9

Ich habe diesen Code einige Ordner Informationen aus einer MySQL-DB anfordernden:Kann die Zeitüberschreitung bei jQuery.post() überprüft werden?

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" 
    ); 
} 

Manchmal ist die Post-Anforderung mal aus wegen der schlechten Internetverbindung. Ist es möglich, eine Zeitüberschreitungsprüfung für $ .post() durchzuführen? Beispiel: Wenn $ .post() mehr als X ms verwendet, laden Sie die Anfrage neu.

UPDATE: Sieht aus wie ich eine Lösung gefunden:

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); 
     } 
     }   
    }); 
} 

Ist das ein OK Weg, dies zu tun? : S

+1

Nein, es ist nicht Okay, denn wenn die Datenvariable gleich null ist, bedeutet das nicht, dass die Anfrage abgelaufen ist, was zu einer unendlichen Anfrage führen würde, wenn functions.slideshow.php tatsächlich null zurückgibt! – ifaour

Antwort

3

Sie sollten $.ajax() und $.ajaxError(), dann mit "ajaxComplete" verwenden, können Sie überprüfen, ob Ihre Anfrage timedout oder succeded.

Quelle: jQuery API

29

$ .ajax verfügt über alle Funktionen, die Sie brauchen, um zu erreichen, was Sie fordern:

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); 
      } 
     } 
    }); 
} 

Bitte beachten Sie, dass Sie benötigen, um Option nicht setzen die Timeout es sei denn, Sie möchten die Fehlermethode nach einer bestimmten Zeit auslösen, die Sie setzen möchten.

+0

Beachten Sie, dass dies auch eine gute Vorlage für ein longpolling clientseitiges Skript ist, wenn Sie gotoDir() auch zum Erfolg führen :) –

Verwandte Themen