0

html5 と javascript を使用してモバイル Web アプリケーションを作成しています。2 つの JavaScript ファイルがあります。AttributesDatabase.js と AttributeView.js.From AttributeView.js は、1 つの選択クエリを実行する AttributeDatabase.js から 1 つの関数を呼び出します。クエリの結果は AtttributeView.js に移動する必要があります。しかし、Websql トランザクションは非同期呼び出しです。適切な結果を返していません。websql の結果を処理する方法はありますか。助けてください。

編集済み

AttributeView.js

var AttributeDAOObj = new AttributeDAO();

AttributeDAOObj.GetAttributeList();
alert(AttributeDAOObj.GetAttributeList());  //This alert is coming as undefined.   

AttributeDAO.js
this.GetAttributeList = function () {
    var baseDAOObj = new BaseDAO();
    var query = "SELECT AttributeName FROM LOGS";
    //  this.Successcalbackfromsrc = this.myInstance.Successcalback;
    var parm = { 'query': query, 'Successcalback': this.myInstance.Successcalback };
    baseDAOObj.executeSql(parm);
}

//To Create database and execute sql queries.
function BaseDAO() {
this.myInstance = this;
//Creating database
this.GetMobileWebDB = function () {
    if (dbName == null) {
        var dbName = 'ABC';
    }
    var objMobileWebDB = window.openDatabase(dbName, "1.0", dbName, 5 * 1024 * 1024);
    return objMobileWebDB;
}

//Executing queries and getting result 
this.executeSql = function (query) {
    var objMobileWebDB = this.myInstance.GetMobileWebDB();
    objMobileWebDB.transaction(function (transaction) {
 //In this transaction i m returning the result.The result value is coming.
        transaction.executeSql(query, [], function (transaction, result) { return result; }, this.Errorclback);
    });
}

}

4

1 に答える 1

0

問題は、コールバックの成功にあります(質問へのコメントのように、DCoderが述べています)

 function (transaction, result) { return result; }

これはどこに戻っていますか?

だから、これはそれを行う方法です(または少なくとも1つの方法)

たとえば、次のことができます。

function (transaction,result){
   console.log("yes, I have some result, but this doesn't say anything, empty result gives also a result");
   // so check if there is a result:
    if (result != null && result.rows != null) {
       if (result.rows.length == 0) {
            // do something if there is no result
       }else{
            for ( var i = 0; i < result.rows.length; i++) {
                var row = result.rows.item(i);
                var id = result.rows.item(i).id; //supposing there is an id in your result
                console.log('Yeah! row id = '+id);
            }
        }
    }else{
       // do something if there is no result
    }
};

上記のコードはよりコンパクトにすることができますが、これはそれをよりよく理解する方法です。

もう 1 つの方法は、この関数を別のコードにすることです。そのため、SQL ステートメントをよりコンパクトで読みやすく保ちます。あなたがエラーコールバックを呼び出すように、これはあなたの関数( this. の前にある)または完全に別の関数にある可能性があります。

于 2013-09-13T08:56:08.270 に答える