Ajax GET 方法加载失败 url,如何重试 ajax 直到成功?

Ajax GET method fails to load url, how to retry ajax until success?

我正在创建这个简单的天气应用程序,该应用程序从 openweathermap.org 获取天气数据。从这里我创建 url 像这样(在那里你得到 xml 数据):

http://api.openweathermap.org/data/2.5/forecast/weather?q=Koper,slovenia&mode=xml&units=metric

所以对于我的应用程序,我使用 jquery 和此代码从 api:

获取数据
$.ajax({
  type: 'GET',
  dataType: 'xml',
  url: "http://api.openweathermap.org/data...",
}).done(function(data){
  xmlDoc = data;

  //from here I work with xml that I get, and put data into array to display chart
  var time=xmlDoc.getElementsByTagName('time');
  ...
}).fail(function(){
  location.reload(); //this is not a good solution
});

这工作正常,但我的下一个问题是:有时来自 openweathermap 的服务器不响应我的 "url" 调用并收到消息错误 404。那么如果你刷新页面(或url)几次,然后就可以了。对于临时解决方案,我在 "fail" 函数中添加了重新加载页面 (location.reload)。但这不是一个好的解决方案,因为当服务器调用失败时,页面会不断重新加载。

知道如何解决这个问题,当服务器无法获取数据时,它会尝试重新连接...tnx 寻求帮助

你的代码应该是这样的:

$.ajax({
  type: 'GET',
  dataType: 'xml',
  url: "http://api.openweathermap.org/data...",
  tryCount : 0, // pass this for internal use if fails
  retryLimit : 3 // pass this for internal use if fails
}).done(function(data){
   ...
   ...
}).fail(function(xhr, textStatus, errorThrown ){
   if (textStatus == 'timeout') {
            this.tryCount++;
            if (this.tryCount <= this.retryLimit) {
                //try again
                $.ajax(this);
                return;
            }            
            return;
        }
        if (xhr.status == 500) {
            //handle error
        } else {
            //handle error
        }
});