Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过HTML5JavaScript在本地ipad/iphone上存储数据,并在设备获得';s在线_Javascript_Iphone_Ipad_Html - Fatal编程技术网

如何通过HTML5JavaScript在本地ipad/iphone上存储数据,并在设备获得';s在线

如何通过HTML5JavaScript在本地ipad/iphone上存储数据,并在设备获得';s在线,javascript,iphone,ipad,html,Javascript,Iphone,Ipad,Html,下面是一个场景:一个提问者包含3个问题,每个问题有4个多个答案。用户将选择每个问题的答案,这些数据以隐藏形式存储在标签中,即 <label id=q1>A</label> <label id=q2>C</label> <label id=q3>D</label> A C D 现在,如果设备连接到互联网,这些数据可以很容易地提交,但如果设备没有互联网,我需要找到一种方法将标签数据存储在用户的设备上,然后下次连接时,应用程序

下面是一个场景:一个提问者包含3个问题,每个问题有4个多个答案。用户将选择每个问题的答案,这些数据以隐藏形式存储在标签中,即

<label id=q1>A</label>
<label id=q2>C</label>
<label id=q3>D</label>
A
C
D
现在,如果设备连接到互联网,这些数据可以很容易地提交,但如果设备没有互联网,我需要找到一种方法将标签数据存储在用户的设备上,然后下次连接时,应用程序将有一个提交按钮,该按钮将提交所有存储的数据(每次回答提问者时)


谢谢

我要做的是将数据保存在中(尽管此链接指向Phonegap文档,localStorage是Html5的一项功能,非常有用),并定期调用一个函数来检查是否有东西要发送

因此,要检查网络连接可用性:

function isOnline(){
    try{
        var status = navigator.network.connection.type;
        var val = (status != 'none' && status != 'unknown');
        return val;
    }catch(err){ console.error('isOnline(): '+err); return false; }
}
包括以下代码行以向localStorage添加一些功能,因为它只允许保存字符串,但通过这两个功能,它也可以存储JSON数据:

Storage.prototype.setObject = function(key, value) { 
    this.setItem(key, JSON.stringify(value)); 
}
Storage.prototype.getObject = function(key) { 
    var value = this.getItem(key);
    return value && JSON.parse(value); 
}
在表单提交处理程序中,只需检查是否存在连接。如果没有连接,请保存要发送的数据:

if(isOnline()){
    // do stuff
}else{
    var data = // The data to be sent
    var toBeSent = localStorage.getObject('toBeSent') || [];
    toBeSent.push(data);    // It's better to store the data in an array, in case there's more than a questioner to be sent
    localStorage.setObject('toBeSent', toBeSent);
}
之后,编写一个检查和发送数据的函数:

function sendPending(){
    var toBeSent = localStorage.getObject('toBeSent') || [];
    var data;
    for(var i in toBeSent){
        data = toBeSent[i];

        // send data
    }
    // Remove the list
    localStorage.removeItem('toBeSent');
}
最后,要定期执行该函数:

setInterval(sendPending, 60000);  // The system will check every minute if there's something to send

你需要该应用程序自动发送已经回答和存储的提问者,还是需要用户交互?嗨,Davids,谢谢你的评论。如果自动效果更好……但不介意是否需要用户交互(最多只需按下同步或发送所有结果按钮).谢谢你的回答!非常感谢!我会尝试让它工作,如果是这样,那么这就是我停车的地方!:)嗨,我正在尝试实现这个代码,但看起来好像做得不对。。。你能看一下这一页并告诉我我到底需要把什么放在哪里吗?谢谢