我的 websql 事务不会执行

发布于 2024-11-29 13:50:53 字数 3329 浏览 2 评论 0原文

我有一个 HTML5 移动应用程序,它使用 websql 数据库。我有一个 data.js 文件,其中包含一堆函数,用于使用数据库执行各种 CRUD 作业。在我连接这个功能之前我从来没有遇到过这个问题。基本上,该应用程序用于为商人创建报价,我正在编写的功能是获取报价和报价行,将它们转换为 JSON 对象数组,并将它们 Ajax 到 Web 应用程序。

由于某种原因,我的 db.transaction 没有被执行。你能帮我找出原因吗?当其他函数调用这个确切的 SQL 时,数据库就存在。但它适用于他们,而不是这个:

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,所以请随意发表评论。

谢谢,

比利

I have a mobile app in HTML5 that is using the websql database. I have a data.js file with a bunch of functions for doing various CRUD jobs with the database. I've never had this problem until I got to wiring this function. Basically the app is for creating quotes for tradesmen and the function I'm writing is getting the quote and quote lines, converting them into and array of JSON objects and ajaxing them to a web app.

For some reason my db.transaction's are not being executed. Can you help me figure out why? The db exists as other functions are calling this exact SQL. But it works for them and not this one:

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'
    });

}

I have both success and fail callbacks but neither is responding.

Also this is the first time I'm posting JSON from a JS app so feel free to comment.

Thanks,

Billy

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

牵强ㄟ 2024-12-06 13:50:53

复制这段编辑好的代码,看看是否有效

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) {

        // CORRECTION 1: THE ? IS MEANT TO BE IN A BRACKET
            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);
        },

    //CORRECTION 2  
    //THERE IS MEANT TO BE A SUCCESS CALL BACK FUNCTION HERE    
    function(){
        console.log( 'Query Completed' )
    }       

        );

     // now get all quote lines for this quote

     var lines = new Array();
     console.log('getting quote lines');
     db.transaction(
        function(tx) {

                // CORRECTION 3: WRONG CALL METHOD AND NONE-USE OF BRACKETS and QOUTES
            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'
    });
}

Copy this edited codes and see if it works

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) {

        // CORRECTION 1: THE ? IS MEANT TO BE IN A BRACKET
            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);
        },

    //CORRECTION 2  
    //THERE IS MEANT TO BE A SUCCESS CALL BACK FUNCTION HERE    
    function(){
        console.log( 'Query Completed' )
    }       

        );

     // now get all quote lines for this quote

     var lines = new Array();
     console.log('getting quote lines');
     db.transaction(
        function(tx) {

                // CORRECTION 3: WRONG CALL METHOD AND NONE-USE OF BRACKETS and QOUTES
            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'
    });
}
醉南桥 2024-12-06 13:50:53

您是否尝试过在成功回调开始时抛出 console.log() ?如果其中 len 为 0,您将不会得到任何输出

have you tried throwing console.log()'s in at the start of your success callbacks? if len is 0 in those, you wouldn't get any output from them as is

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文