如果没有在5秒内完成,则停止javascript函数(jquery)

时间:2011-05-05 01:29:05

标签: javascript jquery ajax function

我目前使用多个API从其他网站提取数据。但是,有时API速度非常慢(特别是Twitter),脚本将继续永久运行,因为Twitter永远不会响应。

我的问题是如何告诉函数停止IF,并且只有在x秒内没有完成?我假设这与setTimeout()有关,但我无法弄明白。

以下是Yahoo Weather API的一些示例代码:

<script type="text/javascript">
    $(function() {

        $.simpleWeather({
            zipcode: '<?= $property_zip ?>',
            unit: 'f',
            success: function(weather) {
                //success
            },
            error: function(error) {
                $("#weathercontent").html('<p>'+error+'</p>');
            }
        });
    });
</script>

谢谢, 菲尔

2 个答案:

答案 0 :(得分:1)

您可以将所有jQuery AJAX请求的全局超时设置为5秒。我相信这也涵盖了自jQuery 1.5以来的JSONP请求,但它可能值得研究。

您可以设置一个设置超时的处理程序。它可以基于传出请求的URL。因此,对于所有拨打Yahoo,Flickr或Twitter的电话,您可以设置超时。下面的预过滤器将在每个AJAX请求发送之前运行,并有机会在发送之前完全修改请求。

jQuery.ajaxPrefilter(function(options) {
    if (options.url is not going to my server) { // pseudocode :)
        options.timeout = 5000;
    }
});

如果您不想要全局处理程序,请在您正在进行的每个timeout调用中设置$.ajax({ .. })属性。对于simpleWeather等第三方插件,如果明确设置超时,您必须修改源代码,这可能会出现问题。

答案 1 :(得分:0)

您的意思是如果服务器响应缓慢,您如何取消ajax请求?我相信这是myAjaxRequest.abort()。这与在执行中停止函数不同。我不确定是否有办法做到这一点。