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
}
});
我正在创建这个简单的天气应用程序,该应用程序从 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
}
});