2010-11-03 5 views
9

tengo este código solicitar alguna información carpeta de una base de datos MySQL:¿Es posible verificar el tiempo de espera en 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" 
    ); 
} 

veces los tiempos de solicitud POST a cabo debido a la mala conexión a Internet. ¿Es posible establecer un control de tiempo de espera en $ .post()? Ejemplo: si $ .post() usa más que X ms, vuelva a cargar la solicitud.

ACTUALIZACIÓN: Parece que he encontrado una solución:

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

Es esta una manera bien hacer esto? : S

+1

No, no está bien, ya que si la var de datos es nula no significa que la solicitud ha excedido el tiempo de espera, lo que causaría solicitudes infinitas si functions.slideshow.php realmente devuelve nulo. – ifaour

Respuesta

3

Debe utilizar $.ajax() y $.ajaxError(), luego con "ajaxComplete" se puede comprobar si su solicitud timedout o succeded.

Fuente: jQuery API

29

$ .ajax tiene todas las funciones que necesita para lograr lo que usted está pidiendo:

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

Tenga en cuenta que no es necesario para establecer la opción de tiempo de espera a menos que desee desencadenar el método de error después de un tiempo específico usted desea establecer.

+0

Tenga en cuenta que esta es también una buena plantilla para una secuencia de comandos del lado del cliente de longpolling si pone gotoDir() al éxito también :) –

Cuestiones relacionadas