Verificare la connettività Internet con jquery

Sto cercando di controllare la connessione ad internet tramite l’invio di una richiesta GET al server. Io sono un principiante in jquery e javascript. Io non sto usando navigator.onLine per il mio codice funziona in modo diverso in diversi browser. Questo è il mio codice così lontano:

var check_connectivity={
        is_internet_connected : function(){
            var dfd = new $.Deferred();
            $.get("/app/check_connectivity/")
            .done(function(resp){
                return dfd.resolve();
            })
            .fail(function(resp){
                return dfd.reject(resp);
            })
            return dfd.promise();
        },
}

Io chiamo questo codice nel file diversi come:

if(!this.internet_connected())
        {
            console.log("internet not connected");
            //Perform actions
        }
internet_connected : function(){
        return check_connectivity.is_internet_connected();
},

Il is_internet_connected() funzione restituisce un oggetto rinviato considerando che ho solo bisogno di una risposta vero/falso. Qualcuno mi può dire su come raggiungere questo obiettivo?

InformationsquelleAutor Gaurav | 2013-11-18

 

6 Replies
  1. 9

    $.get() restituisce un jqXHR oggetto, che è la promessa compatibile – quindi non c’è bisogno di creare il proprio $.Deferred.

    var check_connectivity = {
        ...
        is_internet_connected: function() {
            return $.get({
                url: "/app/check_connectivity/",
                dataType: 'text',
                cache: false
            });
        },
        ...
    };

    Quindi :

    check_connectivity.is_internet_connected().done(function() {
        //The resource is accessible - you are **probably** online.
    }).fail(function(jqXHR, textStatus, errorThrown) {
        //Something went wrong. Test textStatus/errorThrown to find out what. You may be offline.
    });

    Come si può vedere, non è possibile essere definitiva se sei online o offline. Tutti i javascript/jQuery sa è se una risorsa è entrato con successo o meno.

    In generale, è più utile sapere se una risorsa è entrato con successo (e che la risposta era fresco) di conoscere il proprio stato online di per sé. Ogni chiamata ajax può (e dovrebbe) avere la propria .done() e .fail() rami, permettendo l’azione appropriata, qualunque sia l’esito della richiesta.

  2. 3

    Intendi per controllare la connessione a internet, se è collegato?

    Se è così, provate questo:

    $.ajax({
        url: "url.php",
        timeout: 10000,
        error: function(jqXHR) { 
            if(jqXHR.status==0) {
                alert(" fail to connect, please check your connection settings");
            }
        },
        success: function() {
            alert(" your connection is alright!");
        }
    });
    • Avviso non funziona per me. Devo restituire un valore true o false.
    • Inutile modo per controllare il collegamento! perché qualcuno dovrebbe controllare la connessione di rete, se sanno che sono collegati.
    • È possibile che la connessione può essere abbandonato per un certo periodo di tempo, per cui sarebbe bene verificare se questo è il caso.
  3. 1

    non è possibile ottenere true o false in cambio, dare loro un gestore di callback

    function is_internet_connected(callbackhandler)
    {
    $.get({
      url: "/app/check_connectivity/",
      success: function(){
         callbackhandler(true);
      },
      error: function(){
         callbackhandler(false);
      },
      dataType: 'text'
    });
    }
    • Penso differite oggetti sono stati creati in modo da evitare il gestore di callback. In ogni caso, il mio problema non può essere risolto utilizzando il gestore di callback.
    • perché no?
  4. 1
    try this 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script>
     if (! window.jQuery) {
     alert('No internet Connection !!');
      }
     else {
     //internet connected
     }

    Plugin per Jquery per la Rilevazione di Connessione a Internet

    • Io sono in cache la libreria jquery nel locale dell’utente della macchina, in modo che non ha bisogno di scaricare ogni volta che lui apre il sito. Quindi questa idea non funziona per me.
    • questo controllo funziona solo la prima volta che hai caricato il sito, non su ogni richiesta AJAX
  5. 1

    100% di Lavoro:

    function checkconnection() {
        var status = navigator.onLine;
        if (status) {
            alert('Internet connected !!');
        } else {
            alert('No internet Connection !!');
        }
    }
  6. 0

    Mi basta usare il navigatore on-line di proprietà, secondo il W3C http://www.w3schools.com/jsref/prop_nav_online.asp

    MA il navigatore ci dice solamente se il browser ha la capacità di internet (collegato al router, 3G o simili).
    Quindi, se questa restituisce false probabilmente non in linea, ma se restituisce vero che si può ancora essere collegato se la rete è basso o molto lento.
    Questo è il tempo per controllare un XHR richiesta.

    setInterval(setOnlineStatus(navigator.onLine), 10000);
    
    function setOnlineStatus(online)
    {
        if (online) {
        //Check host reachable only if connected to Router/Wifi/3G...etc
            if (hostReachable())
                $('#onlineStatus').html('ONLINE').removeAttr('class').addClass('online');
            else
                $('#onlineStatus').html('OFFLINE').removeAttr('class').addClass('offline');
        } else {
            $('#onlineStatus').html('OFFLINE').removeAttr('class').addClass('offline');
        }
    }
    
    function hostReachable()
    {
        //Handle IE and more capable browsers
        var xhr = new (window.ActiveXObject || XMLHttpRequest)("Microsoft.XMLHTTP");
        var status;
    
        //Open new request as a HEAD to the root hostname with a random param to bust the cache
        xhr.open("HEAD", "//" + window.location.hostname + "/?rand=" + Math.floor((1 + Math.random()) * 0x10000), false);
    
        //Issue request and handle response
        try {
            xhr.send();
            return (xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304));
        } catch (error) {
            return false;
        }
    
    }

    MODIFICA: permette di Utilizzare il numero di porta se c’è di diverso 80, altrimenti fallisce.

    xhr.open("HEAD", "//" + window.location.hostname + ":" + window.location.port + "/?rand=" + Math.floor((1 + Math.random()) * 0x10000), false);
    • Questo non funziona sempre, che è il motivo per cui ho chiesto a questa domanda, in primo luogo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *