2010-11-09 13 views
12

Lors d'un appel au service Web de Yahoo (http://boss.yahooapis.com/ysearch) pour renvoyer un ensemble de données, est-il possible de définir un délai et de quitter la routine une fois qu'elle est écoulée? ?jQuery getJSON avec timeout

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

Répondre

15

Vous pouvez utiliser l'option de délai d'attente

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

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

Merci! Quel est le rappel pour quand le délai d'attente est déclenché? –

+0

non, c'est pour quand l'appel ajax revient ... cette fonction de rappel sera appelée – Galen

+0

très agréable, mais comment pouvez-vous mettre un eventhandler sur le timeout? –

0

L'option de délai d'attente proposé par Galien est la meilleure façon. Si vous voulez une méthode alternative, vous pouvez enregistrer l'heure à laquelle la demande a été lancée et, dans votre rappel, la comparer à l'heure actuelle. Ignorez le résultat si un certain laps de temps s'est écoulé. Bien sûr, cela n'annulerait pas la demande.

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

Le callback d'erreur n'est pas appelé pour les requêtes 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

Hey nice answer ... –

+0

J'aime la créativité de cette réponse. En fait, je ne savais pas que je pouvais annuler un appel getJSON de cette façon, merci. Cela a fonctionné pour notre application. – uadrive