私がすることは、localStorageにデータを保存し(このリンクは Phonegap Docs を指していますが、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 にいくつかの機能を追加しますが、これら 2 つの関数を使用すると、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