0

特定の時点で、デバイスでのインターネットアクセスの可用性を確認する必要があります。だから、私は小さな画像をロードするためにサーバーに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');
    });

});
4

1 に答える 1

1

checkOnline約束自体を返すように変更します。

$(document).on('click','#explore',function() {
     checkOnline('url.com').done(function(){
          // Do something
     });
});

var connectionAlive;
function checkOnline(url) {
    return $.ajax({url : url})
            .done(function() {console.log('Connection alive');connectionAlive = true;})
            .fail(function() {console.log('Connection dead');connectionAlive = false;});
}

または、コールバックを受け取るように変更します。

$(document).on('click','#explore',function() {
     checkOnline('url.com', function(){
          // Do something
     });
});

var connectionAlive;
function checkOnline(url, callback) {
    $.ajax({ url : url})
     .done(function() {console.log('Connection alive');connectionAlive = true;})
     .done(callback)
     .fail(function() {console.log('Connection dead');connectionAlive = false;});
     // Do not try to return connectionAlive from here,
     // it will return the value before the ajax response arrived
}
于 2012-06-29T02:25:58.743 に答える