0

データベースの ORDERS テーブルから注文を取得する SQLite クエリがあります。

        qry.executeSql("SELECT o.ID AS orderIDx, o.token AS orderTokenx, r.retailerName AS retailerNamex FROM orders AS o LEFT JOIN retailers AS r ON r.token = o.retailerID  ", [], function(tx, results){
            //query was a success
            var len = results.rows.length;
            for (var i=0; i<len; i++){  
                var orderID = results.rows.item(i).orderIDx;
                var orderToken = results.rows.item(i).orderTokenx;
                var retailerName = results.rows.item(i).retailerNamex;
                //create container for order and populate it with orderItems in the below query                     
                qry.executeSql("SELECT * FROM orderItems WHERE orderID =  '"+orderToken+"' ", [], function(tx1, results1){

                    var len1 = results1.rows.length;
                    for (var i1=0; i1<len1; i1++){          
                        $('.orderItem.'+orderID+' p').append(results1.rows.item(i1).productName);                       
                    }
                });
            }               
        });

これは私の質問ですが、多くの雑然としたものを取り除いたので、必要なものは残しました。

そのため、注文テーブルをループして、注文固有の情報を 1 つのセクションに表示しようとしています。その中で、ドロップダウンとして各注文項目を表示します。したがって、注文ループ内では、その ID を使用して orderItems などを呼び出していますが、最後のコンテナーに orderItem クエリの結果を追加するだけです。

これは、クエリが非同期であるためだと思いますが、注文クエリの次のループが実行される前に orderItem コンテナーを作成する方法がわかりません:/

私は非同期jQuery AJAXのもので同じことをするのに苦労しています..これがリンクされている場合、説明は素晴らしいでしょう.

また、外側のクエリで order テーブルと orerItems テーブルを結合するために JOIN を使用する予定でしたが、アイテムと注文を 1 つのループ内でループする方法がわかりませんでした。

4

1 に答える 1

1

私にとって問題はorderID、orderItems が追加される前に変更される変数のようです。

最後の for ループをに変更すると役立つと思います

var len1 = results1.rows.length;
var order_id = results1.rows.item(0).orderID;
for (var i1=0; i1<len1; i1++){          
    $('.orderItem.'+order_id+' p').append(results1.rows.item(i1).productName);                       
}

この場合、変更された変数はもう使用されません。

于 2013-04-09T14:15:44.580 に答える