jQuery getJSON 超时

Posted

技术标签:

【中文标题】jQuery getJSON 超时【英文标题】:jQuery getJSON with timeout 【发布时间】:2011-05-07 12:16:45 【问题描述】:

当调用 yahoo Web 服务 (http://boss.yahooapis.com/ysearch) 以返回数据集时,是否可以设置超时并在超时后退出例程?

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

【问题讨论】:

【参考方案1】:

您可以使用超时选项

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

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

【讨论】:

谢谢!触发超时的回调是什么? 不,那是 ajax 调用返回的时候……那个回调函数会被调用 非常好,但是如何将事件处理程序设置为超时?【参考方案2】:
 $.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 
   
); 

【讨论】:

【参考方案3】:
    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');
            
        
    

【讨论】:

我喜欢这个答案的创造性。我实际上不知道我可以以这种方式中止 getJSON 调用,所以谢谢。这适用于我们的应用程序。【参考方案4】:

Galen 提出的超时选项是最好的方法。如果您想要一种替代方法,您可以记录发起请求的时间,并在您的回调中将其与当前时间进行比较。如果经过一定时间,则忽略结果。当然这不会取消请求。

【讨论】:

以上是关于jQuery getJSON 超时的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:处理 getJSON() 中的错误?

jQuery:请求 getJSON + SunlightLabs API 帮助

jQuery中$.getJSON

jQuery 中 $.getJSON() 和 $.ajax() 的区别

jQuery 返回 $.getJSON 值

JSONP 的 getJSON 回调有啥意义?