我正在开发一个使用 cache.manifest 缓存相关文件以供离线使用的网页。但是,我需要能够检测是否有实际的互联网连接。if(!navigator.onLine) 只能在一定程度上起作用..它往往会说它在线,而实际上却不是。因此,我试图创建一个 ajax 调用,如果调用成功则返回 true,否则返回失败。我不是 jQuery 的大师,但这是我目前所拥有的。我已经尝试了许多替代方案,但我总是以“未定义”的回报告终。
function checkIfOnline() {
var returned = true;
$.get('services/getObjects.ashx',
{
"get": "heartbeat",
"hash": userHash,
"uid": uid,
"gid": gid
},
function (data) {
if(data.result === "Success") {
alert("Success");
}
console.log(data.result);
},
"json"
)
.done(function () {alert("done");
returned = true;
return returned;})
.fail(function () {alert("fail");
returned = false;
return returned;});
}
任何人都可以看到我做错了什么?警报都显示了他们应该做什么......我收到“成功”警报,然后根据连接“完成”或“失败”。
更新
根据指出的线程,我对代码进行了以下更改
function checkIfOnline() {
return $.ajax({
type: 'GET',
url: 'services/getObjects.ashx',
data:
{
"get": "heartbeat",
"hash": userHash,
"uid": uid,
"gid": gid
}
});
}
function getOnlineStatus() {
checkIfOnline().done(function(result) {
alert("done - "+result.result);
return true;
}).fail(function() {
alert("failed");
return false;
});
}
但我仍然得到这个烦人的“未定义”,但既不是真也不是假(调用 getOnlineStatus() 时)