我必须在给定的时间点检查设备中互联网访问的可用性。因此,我正在对服务器进行 ajax 调用以加载一个小图像。我遇到了 jQuery Deferred 并尝试使用它。
var spacer = "some url";
var getImage;
var connectionAlive;
function checkOnline(spacer) {
getImage = $.ajax({url:spacer})
.done(function() {console.log('Connection alive');connectionAlive = true;})
.fail(function() {console.log('Connection dead');connectionAlive = false;});
if(connectionAlive === true) {
return true;
}
return false;
}
现在我必须在某些事件发生时调用这个 checkOnline 函数。所以,我正在调用该函数并等待承诺得到解决。
$(document).on('click','#explore',function() {
checkOnline(spacer);
getImage.done(function() {
// Do something
})
});
这仅在第一次有效,我认为这是因为延迟对象状态在解决后保持不变。我应该如何编写我的代码,以便每次点击事件触发时我都可以实际检查连接?
新代码:
嗨,我遵循了上面的代码,但点击事件仍然只能在第一次正常工作。
var connectionAlive;
var url = "http://example.com";
function checkOnline(url, callback1,callback2) {
$.ajax({url:url})
.done(function() {console.log('Connection alive');connectionAlive = true;})
.done(callback1)
.fail(function() {console.log('Connection dead');connectionAlive = false;})
.fail(callback2);
}
$(document).on('click','#explore',function() {
checkOnline(url, function(){
console.log('Connection Alive from event');
},function() {
console.log('Connection Dead from event');
});
});