无法一个接一个地运行方法

时间:2013-11-18 06:44:20

标签: jquery cordova

          function retrieve_Data() {

        $.ajax({
            url: "http://192.168.1.186/json_android/getItemData.php",
            jsonpCallback: 'item',
            contentType: "application/json",
            dataType: 'jsonp',
            beforeSend: function() {
                $.mobile.showPageLoadingMsg();
            },
            success: function(data) {
                console.log(data);
                var markup = "";
                $.each(data.list, function(i, elem) {
                    dbInsert(elem['itemCode'], elem['description'], elem['price']);
                });
                $.mobile.hidePageLoadingMsg();
            },
            error: function(request, error) {
                alert(error);
            }
        });
    }


function dbInsert(itemCode, description, price) {

    var sqlTxt = "INSERT INTO ITEMS (itemCode,description,price ) VALUES (?,?,?)";

    db.transaction(
            function(tx) {
                tx.executeSql(sqlTxt, [itemCode, description, price]);
            }, errorCB);
}


    function queryDB(callback) {
        var sqlTxt = "SELECT * FROM ITEMS";
        db.transaction(
                function(tx) {
                    tx.executeSql(sqlTxt, [],
                            function(tx, results) {
                                console.log("Length is" + results.rows.length);
                                var item_Codes = [];
                                for (var i = 0; i < results.rows.length; i++) {

                                    item_Codes.push({item_code: results.rows.item(i).itemCode, description: results.rows.item(i).description, price: results.rows.item(i).price});
                                }
                                callback(item_Codes);
                            })
                            , errorCB;
                });
        return false;
    }

我的jquery文件中有3个方法.retrieve,insert和querydb。每个函数都能正常工作。一旦检索函数调用它就会从服务器获取数据并保存在数据库中。当querydb运行时,它将获取所有值从db并保存在一个数组中。当我单独运行每个方法时它工作正常。但我需要运行另一个这些方法。

1 个答案:

答案 0 :(得分:0)

实际上,你的所有方法都很好,这就是为什么当你单独执行它们时它们运行得很好的原因。

问题实际上是在ajax调用中,当你通过ajax调用Web服务时,控件在ajax给出响应之前进入函数。所以当你调用retrieve_Data()方法时,它通过ajax调用webservice,在它获得响应之前,你的函数retrieve_Data已经结束,这就是为什么没有调用dbInsert方法,结果你无法得到你想要的结果。

现在是解决方案的时候,你应该使用setTimeout方法。它将等待5000毫秒,之后您的方法将结束。

function retrieve_Data() {
        $.ajax({
            url: "http://192.168.1.186/json_android/getItemData.php",
            jsonpCallback: 'item',
            contentType: "application/json",
            dataType: 'jsonp',
            beforeSend: function() {
            $.mobile.showPageLoadingMsg();
        },
        success: function(data) {
            console.log(data);
            var markup = "";
            $.each(data.list, function(i, elem) {
                dbInsert(elem['itemCode'], elem['description'], elem['price']);
            });
            $.mobile.hidePageLoadingMsg();
        },
        error: function(request, error) {
            alert(error);
        }
    });
    setTimeout(function(){
         console.log("Wait for Webservice Response");
    },5000);
}

希望它能解决你的问题。