看起来jQuery的.ajax
函数会激活'success'
函数,即使它没有得到服务器的响应。我认为这是一个错误。我通过检查是否'request.status===0'
来检测此事件,是否有其他任何实例,即使出现错误情况,我应该检查'success'
函数将被触发的位置?
我已经发布了我现在正在使用的代码。这种情况通常如何处理?
$.ajax({
async : true, cache : false, dataType : 'json',
type : 'POST',
url : 'person/' + personKey,
data : JSON.stringify({firstName:'Jilopi',}),
success : function(data, textStatus, request){
if( request.status === 0 ){
alert('Error: problem saving person - no response');
}else{
alert('Success: saved person');
}
},
error : function(request, textStatus, errorThrown){
alert('Error: problem saving person');
},
});
答案 0 :(得分:8)
你已经确定了我所知道的唯一“错误成功”问题。稍微详细说明一下:这是一个严格适用于Opera的解决方法(它将实际上一个304
作为0
返回),你可以看到评论在 1.4.2 (以及之前的版本)中:http://github.com/jquery/jquery/blob/1.4.2/src/ajax.js#L551
但是,it has been removed in jQuery 1.4.3 because of your exact issue,您可以看到the change that did it here。
简短回答:升级到jQuery 1.4.3+以解决您的问题,您可以取消status === 0
支票。
答案 1 :(得分:0)
我还需要显示ES服务器是否在线! 我的解决方案:
我使用长轮询来检查我的服务器状态!而ES已经有了 REST API调用只是为了获取有关ES服务器的信息!
该群集健康请求!
Read about ES Cluster Health Requests here!
只需在Web浏览器中键入以下内容,然后查看有关ES服务器的响应!
http://your-server-url:9200/_cluster/health
简单的jQuery长轮询递归函数代码:
(function poll(){
health_url = "http://your-server-url:9200/_cluster/health";
online_ajax = false;
setTimeout(function(){
$.ajax({
url: health_url,
dataType: "json",
success: function(data){
if (data.status == 'yellow') {
// Show Server-Online Status Message in your App
} else {
// Show Server-Offline Status Message in your App
};
//Setup the next poll recursively
poll();
}
})
.fail(function(){
// Show Server-Offline Status Message in your App
});
}, online_status_time_out);
})();
希望这个答案对每个人都有帮助!
干杯!!!