2010-11-09 69 views
12

當向yahoo web服務(http://boss.yahooapis.com/ysearch)發出呼叫以返回數據集時,是否可以設置超時並在其過去後退出例程?jQuery getJSON超時

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

回答

15

可以使用超時選項

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

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

謝謝!什麼時候超時被觸發的回調? – 2010-11-09 21:29:36

+0

不,這就是爲什麼當ajax調用返回時...該回調函數將被稱爲 – Galen 2010-11-09 22:43:25

+0

非常好,但你怎麼能把一個事件處理器放在超時? – 2011-05-27 08:21:38

0

蓋倫提出的超時選項是最好的方式。如果你想要一個替代方法,你可以記錄請求開始的時間,並且在你的回調中,將它與當前時間進行比較。如果經過一段時間,則忽略結果。當然這不會取消請求。

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

錯誤回調沒有爲JSONP請求調用... – Matt 2012-10-03 19:25:19

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

嗨,很好的答案... – 2012-08-31 07:21:47

+0

我喜歡這個答案的創造性。我其實不知道我可以以這種方式中止getJSON調用,所以謝謝。這適用於我們的應用程序。 – uadrive 2014-05-21 14:56:50