2017-10-20 113 views
0

以下代码将数据提交给服务器。在提交给服务器之前,数据实际上存储在localStorage中。这是因为我要求用户能够在没有互联网连接的情况下使用我的系统。没有互联网连接时的ajax回退

问题是,当没有互联网连接,显然它不能将数据发布到服务器。在这种情况下我应该怎么做?

$('#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

您的错误回调将被调用。为什么不维护无法推送到服务器的数据的单独队列(在本地存储中)。定期检查您是否在线并重播ajax电话。 – mode777

+2

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

+0

@ mode777我将数据保存在localStorage中,以避免ajax提交失败时丢失数据。所以至少我有一个localStorage中的数据副本。定期检查意味着使用JavaScript setInterval?似乎你有经验,你能详细阐述一下还是用样本? –

回答

1

您可以使用类似的ajax调用来检查连接/服务器是否启动。寻找

statusCode.status == 0 

出错,并给用户提供目标无法访问/互联网关闭通知。您可以创建此ajax调用作为函数中的承诺,并在所有ajax调用之前使用它,并要求用户连接到Internet,然后重试。

+0

我应该在哪里放这行代码?它是在'错误:函数(数据){如果(statusCode.status == 0){/ /通知用户}}? –

+0

是的,在错误中,或在更新的代码风格中失败,如: $ .post('balbal.html',{},function(data){ // ...我的代码... }) 。失败(功能(响应){console.log(响应); }); –