2

websql データベースを使用する HTML5 のモバイル アプリがあります。データベースでさまざまな CRUD ジョブを実行するための一連の関数を含む data.js ファイルがあります。この機能を配線するまで、この問題は一度もありませんでした。基本的に、アプリは商人の見積もりを作成するためのものであり、私が書いている関数は、見積もりと見積もり明細を取得し、それらを JSON オブジェクトの配列に変換し、それらを Web アプリに ajax することです。

何らかの理由で、db.transaction が実行されていません。理由を理解するのを手伝ってもらえますか? 他の関数がこの正確な SQL を呼び出しているため、db が存在します。しかし、それは彼らのために機能し、これでは機能しません:

function syncQuote(){
    var quote_id = localStorage["quote_id"];

    var header = new Array(); // holds id, created, appointment_id

    db = openDatabase("Quote", "0.1", "A collection of quotes.", 200000);

    if(!db){
        console.log('Failed to connect to database.');
    }

    console.log('Getting quote header data.');
    db.transaction(
        function(tx) {
            tx.executeSql("SELECT * FROM quote_header WHERE id = ?", [quote_id],
                function(tx, results) {

                    var len = results.rows.length;
                    for(var i=0; i< len; i++){
                        alert('booyah!');
                        header['quote_id'] = results.rows.item(i).id;
                        header['appointment_id'] = results.rows.item(i).appointment_id;
                        header['created'] = results.rows.item(i).created;
                    }
                });
        },
        function(tx, error){
            console.log(error.message);
        }
        );

     // now get all quote lines for this quote

     var lines = new Array();
     console.log('getting quote lines');
     db.transaction(
        function(tx) {
            tx.executeSql("SELECT DISTINCT areas.label as area, features.label as feature, products.label as product, hours, price, colour FROM quote_line JOIN areas ON quote_line.area_id = areas.area_id JOIN features ON quote_line.feature_id = features.feature_id JOIN products ON quote_line.product_id = products.product_id WHERE quote_line.quote_id = ?", [quote_id],
                function(tx, results) {

                    len = results.rows.length;
                    for(var i=0; i< len; i++){
                        var area= results.rows.item(i).area;
                        var feature= results.rows.item(i).feature;
                        var product= results.rows.item(i).product;
                        var hours= results.rows.item(i).hours;
                        var price= results.rows.item(i).price;
                        var colour= results.rows.item(i).colour;

                        lines[i] = new Array(6);
                        lines[i][0] = area;
                        lines[i][1] = feature;
                        lines[i][2] = product;
                        lines[i][3] = hours;
                        lines[i][4] = price;
                        lines[i][5] = colour;

                    }

                },

                function(tx, error){
                    console.log(error.message);
                }
            );
        }
    );

    var data = new Array(2);
    data[0] = JSON.stringify(header);
    data[1] = JSON.stringify(lines);

    alert(data[0]);
    alert(data[1]);

    // post data to web app
    var url = "http://*****.com/import_quote";

    $.ajax({
      type: 'POST',
      url: url,
      data: data,
      success: quote_sync_success,
      dataType: 'JSON'
    });

}

成功と失敗の両方のコールバックがありますが、どちらも応答しません。

また、JS アプリから JSON を投稿するのはこれが初めてなので、お気軽にコメントしてください。

ありがとう、

ビリー

4

2 に答える 2

0

成功のコールバックの開始時に console.log() を投げてみましたか? これらの len が 0 の場合、そのままでは出力が得られません。

于 2011-08-12T03:35:26.673 に答える