我目前使用多个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>
谢谢, 菲尔
答案 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()。这与在执行中停止函数不同。我不确定是否有办法做到这一点。