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

时间:2015-03-18 13:43:51

标签: jquery ajax get

我正在创建这个简单的天气应用程序,应用程序从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.然后,如果您多次刷新页面(或网址),那么它的工作原理。对于临时解决方案,我在"失败"函数重新加载页面(location.reload)。但这不是一个好的解决方案,因为当服务器调用失败时,页面会不断重新加载。

任何想法如何解决这个问题,当服务器无法获取数据以便它再次尝试重新解析时... tnx寻求帮助

1 个答案:

答案 0 :(得分:1)

您的代码应该是这样的:

$.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
        }
});