2012-03-02 16 views
0

私はphonegap APIを初めて使用していて、ループと共にストレージ部分に問題があります。ループは、executeSqlを最初に呼び出す前に終了します。Jquery(モバイル)とphonegapストレージモジュールが同期していません

Psudo例:

リスト= [1,2,3]。 //この例では、id 1には3つのタグがあり、id 2には6つのタグがあり、id 3には9つのタグがあります。

$ .each(リスト、関数(指数値){ アラート(値); tx.executeSql( 'タグからSELECT TAG_NAME親=' +値、[]、関数(TX、結果){ アラート(results.rows.length); }、sqlError); });

望ましい結果:1,3,2,6,3,9 結果:TXが実行される前に、1,2,3,9,9,9

だからジャバスクリプトが終了すると、クエリは常に意志を「あなたのjavascriptが終了した後に、それが返されますので、親= 3

答えて

1

は、ExecuteSQLは、非同期メソッドであるタグからタグ名を選択:あなたはいつも買ってあげる理由です 『と。最初の』 1,2,3を

"3,6,9"の代わりに "9,9,9"を取得する理由として、おそらくphonegapの実装ではstaticオブジェクトを 'results'に使用し、最新の呼び出しで上書きされます。

SELECTごとに個別のトランザクションを実行することをお勧めします。 documentation for transactionsを確認してください。私は次のことを行うと、ご希望の結果を達成するために

$.each(list, function(index,value){ 
     db.transaction(function(tx) { 
       tx.executeSql('SELECT tag_name FROM Tag WHERE parent = ' + value, 
         [], 
         function(tx, results) { 
           alert(value); 
           alert(results.rows.length); 
         }, 
         sqlError 
       ); 
     }); 
}); 
関連する問題