2017-10-20 25 views
0

Le code suivant envoie des données au serveur. Les données sont stockées dans le localStorage avant d'être envoyées au serveur. Cela est dû à mon exigence pour l'utilisateur d'être en mesure d'utiliser mon système sans connexion Internet.ajax fallback en l'absence de connexion Internet

Le problème est que lorsqu'il n'y a pas de connexion Internet, il est évident qu'il ne peut pas envoyer les données au serveur. Que dois-je faire dans cette situation?

$('#btnSync').on('click', function(e) { 
    var my_data = {}; 
    var my_value = []; 

    for (var i = 0, len = localStorage.length; i < len; ++i) { 
     if((localStorage.key(i).includes('set'))){ 
      var lsItems = JSON.parse(localStorage.getItem(localStorage.key(i))); 

      allItems[localStorage.key(i)] = lsItems; 
     } 
    } 

    $.ajax({ 
     url: "action.php", 
     type: "POST", 
     data: {'action':'btnSync','allItems':allItems}, 
     dataType: "json", 
     success: function(data) { 
      $.notify(
       { 
        message: data.message 
       }, 
       { 
        type: data.status, 
        placement: { 
         from: "top", 
         align: "left" 
        }, 
        newest_on_top: true, 
        delay: 0 
       } 
      ); 
     }, 
     error: function(data){ 
      $.notify(
       { 
        message: 'Unexpected error occured, please kindly contact System Administrator' 
       }, 
       { 
        type: 'danger', 
        placement: { 
         from: "top", 
         align: "left" 
        }, 
        newest_on_top: true, 
        delay: 0 
       } 
      ); 
     } 
    }); 
}); 
+0

Votre rappel d'erreur sera appelé. Pourquoi ne pas conserver une file d'attente séparée pour les données qui n'ont pas pu être envoyées au serveur (dans le stockage local). Vérifiez périodiquement si vous êtes en ligne et relisez les appels ajax. – mode777

+2

regardez 'window.addEventListener ('online', sendToServer) window.addEventListener ('offline', alertUser)' –

+0

@ mode777 Je conserve les données dans localStorage pour éviter que les données manquantes lors de la soumission ajax échouent. Alors qu'au moins j'ai une copie des données dans le localStorage. Vérification périodique signifie utiliser javascript setInterval? On dirait que vous avez de l'expérience, pouvez-vous élaborer plus ou avec un échantillon peut-être? –

Répondre

1

Vous pouvez vérifier si la connexion/le serveur est en cours en utilisant un appel ajax similaire. Recherchez

statusCode.status == 0 

en erreur et indiquez à l'utilisateur une destination inaccessible/Internet. Vous pouvez créer cet appel ajax comme une promesse dans une fonction et l'utiliser avant tous vos appels ajax, et demander à l'utilisateur de se connecter à Internet puis réessayer.

+0

Où devrais-je mettre cette ligne de code? Est-ce dans 'error: function (data) {if (statusCode.status == 0) {// notifie l'utilisateur}}'? –

+0

oui, par erreur, ou dans un style de code plus récent en échec comme: $ .post ('balbal.html', {}, fonction (données) { // ... mon code ... }) . échec (fonction (réponse) { console.log (réponse); }); –