1

シナリオは次のとおりです。3 つの質問を含む質問者がいて、各質問には 4 つの複数回答があります。ユーザーは各質問に対する回答を選択し、これらのデータはラベルの非表示のフォームに保存されます。

<label id=q1>A</label>
<label id=q2>C</label>
<label id=q3>D</label>

デバイスがインターネットに接続されている場合、これらのデータは簡単に送信できますが、デバイスがインターネットに接続されていない場合は、ラベル データをユーザーのデバイスに保存する方法を見つける必要があります。保存されたすべてのデータを送信する送信ボタンを用意します (質問者が回答するたびに)。

ありがとう

4

1 に答える 1

3

私がすることは、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
于 2012-08-10T07:41:44.393 に答える