2012-03-29 29 views
1

私はちょっとしたトラブルを抱えています... 私はウェブアプリケーションの一部として検索結果を得ようとしていますが、返された変数は、javascript関数によって「未定義」です

$(function() { 
    $('#bnt_fund_8y').click(function() { 
     console.log(dbCheck("study_mode")); 
} 
}); 

このDBCHECK機能が離れて行くと、以下の機能には、設定されているものをstudy_mode見るためにローカルDBを確認します:

dbCheck = function(dbSearch) { 
    mydb.transaction(
     function(transaction) { 
      transaction.executeSql('SELECT "'+dbSearch+'" FROM funding WHERE id = 1',[], function(transaction, results) { 
       var dbResult = results.rows.item(0).study_mode; 
       alert(dbResult); 
       return(dbResult); 
      }, errorHandler); 
     }); 
    } 

私は、ボタンのクリックで実行し機能を持っています

アラートには正しい変数が表示されますが、コンソールログには未定義が表示されます。この歓迎の 任意のヘルプ...

+0

に渡されるコールバックに

console.log(dbResult); 

を追加する必要があります。 –

答えて

2

transactionは、あなたの関数が戻るので、あなたはtransactionが発生与えるコールバックの前に(任意の値を返さずに)、非同期呼び出しです。あなたのコードのreturnステートメントはdbCheckから何も返されず、あなたが提供したコールバック関数から外れています。

この機能を変更する必要があります。

機能の変更:

// add callback parameter --v 
dbCheck = function(dbSearch, callback) { 
    mydb.transaction(
     function(transaction) { 
      transaction.executeSql('SELECT "'+dbSearch+'" FROM funding WHERE id = 1',[], function(transaction, results) { 
       var dbResult = results.rows.item(0).study_mode; 
       alert(dbResult); 
       // Call the callback with the result 
       callback(dbResult); 
      }, errorHandler); 
     }); 
    } 

がそれを呼び出す:

$(function() { 
    $('#bnt_fund_8y').click(function() { 
     dbCheck("study_mode", function(result) { 
      console.log(result); 
     }); 
} 
}); 
0
dbCheck = function(dbSearch) { 
    mydb.transaction(
    ... 
    ); 
} 

は何も返さないので、あなたが得る値はundefinedです。 transactionはコールバック関数を持つ非同期呼び出しのように見えるので、返す唯一の有用なものはdbResultの約束です。

0

非同期呼び出しのコールバックから何も返すことはできません。また、結果のコールバックを使用します。

dbCheck = function(dbSearch, callback) { 
    mydb.transaction(
    function(transaction) { 
     transaction.executeSql('SELECT "'+dbSearch+'" FROM funding WHERE id = 1',[], function(transaction, results) { 
     var dbResult = results.rows.item(0).study_mode; 
     callback(dbResult); 
     }, errorHandler); 
    }); 
    }); 
}; 

使用法:

私が言うことができるものから、
dbCheck("study_mode", function(value) { 
    console.log(value); 
}); 
0

DBCHECKは全く何も返していない機能

mydb.transactionisは実際に何かを返す関数です。

誰もが指摘しているように、mydb.transactionisは非同期です。

あなただけが持っている...面白いブレーシングスタイルだmydb.transaction

関連する問題