オフラインで使用するために関連ファイルをキャッシュするために cache.manifest を使用している Web ページを開発しています。ただし、実際のインターネット接続があるかどうかを検出できる必要があります。if(!navigator.onLine) はある程度までしか機能しません..実際にはオンラインではないのに、オンラインであると言う傾向があります。そのため、呼び出しが成功した場合は true を返し、そうでない場合は失敗を返す ajax 呼び出しを作成しようとしています。私は 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;
});
}
しかし、私はまだこの迷惑な「未定義」を取得していますが、trueでもfalseでもありません( getOnlineStatus() を呼び出す場合)