2010-11-09 28 views
12

Bir veri seti döndürmek için yahoo web hizmetine (http://boss.yahooapis.com/ysearch) bir arama yaparken, zaman aşımı ayarlamak ve geçirdikten sonra rutinden çıkmak mümkün mü? ?jQuery getJSON ile zaman aşımı

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

cevap

15

Sen aşımı seçenekle

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

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

teşekkürler! Zaman aşımı ne zaman tetiklenir? –

+0

hayır, ajax çağrısının ne zaman döndüğü için ... bu geriçağırım işlevi – Galen

+0

çok güzel çağrılacak, ama zaman aşımına nasıl bir eventhandler koyabilirsiniz? –

0

Galen tarafından önerilen zaman aşımı seçeneği iyi yoldur kullanabilirsiniz. Alternatif bir yöntem istiyorsanız, isteğin başlatıldığı zamanı kaydedebilir ve geri çağrınızda mevcut saati karşılaştırabilirsiniz. Belirli bir süre geçtiyse sonucu yoksayın. Tabii ki bu talebi iptal etmeyecek.

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 istekleri için hata geri çağrısı yapılmıyor ... – 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 güzel cevap ... –

+0

Bu yanıtın yaratıcılığını beğeniyorum. Aslında bir getJSON çağrısını bu şekilde iptal edebildiğimi bilmiyordum, teşekkürler. Bu bizim app için çalıştı. – uadrive