2010-11-09 28 views
12

Al realizar una llamada al servicio web de yahoo (http://boss.yahooapis.com/ysearch) para devolver un conjunto de datos, ¿es posible establecer un tiempo de espera y salir de la rutina una vez transcurrido? ?jQuery getJSON con tiempo de espera

jQuery.getJSON("http://boss.yahooapis.com/ysearch/...etc", 
     function (data) { 
       //result set here 
      }); 

Respuesta

15

Usted puede utilizar la opción de tiempo de espera

http://api.jquery.com/jQuery.ajax/

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback, 
    timeout: 3000 //3 second timeout 
}); 
+0

Gracias! ¿Cuál es la devolución de llamada cuando se dispara el tiempo de espera? –

+0

no, eso es para cuando la llamada ajax regrese ... esa función de devolución de llamada se llamará – Galen

+0

muy bonita, pero ¿cómo se puede poner un controlador de eventos en el tiempo de espera? –

0

La opción de tiempo de espera propuesto por Galeno es la mejor manera. Si desea un método alternativo, puede registrar la hora en que se inició la solicitud y, en su devolución de llamada, compararla con la hora actual. Ignore el resultado si ha transcurrido un cierto tiempo. Por supuesto, esto no cancelaría la solicitud.

13
$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback, 
    timeout: 3000 //3 second timeout, 
    error: function(jqXHR, status, errorThrown){ //the status returned will be "timeout" 
    //do something 
    } 
}); 
+1

Error de devolución de llamada no se llama para solicitudes JSONP ... – Matt

5
function testAjax() { 
     var params = "test=123"; 
     var isneedtoKillAjax = true; // set this true 

     // Fire the checkajaxkill method after 10 seonds 
     setTimeout(function() { 
      checkajaxkill(); 
     }, 10000); // 10 seconds     

     // For testing purpose set the sleep for 12 seconds in php page 

     var myAjaxCall = jQuery.getJSON('index2.php', params, function(data, textStatus){    
      isneedtoKillAjax = false; // set to false 
      // Do your actions based on result (data OR textStatus) 
     }); 

     function checkajaxkill(){ 

      // Check isneedtoKillAjax is true or false, 
      // if true abort the getJsonRequest 

      if(isneedtoKillAjax){ 
       myAjaxCall.abort(); 
       alert('killing the ajax call');     
      }else{ 
       alert('no need to kill ajax'); 
      } 
     } 
    } 
+0

Oye buena respuesta ... –

+0

Me gusta la creatividad de esta respuesta. De hecho, no sabía que podía abortar una llamada getJSON de esa manera, así que gracias. Esto funcionó para nuestra aplicación. – uadrive