2012-03-29 74 views
1

我遇到了一些麻煩...... 我試圖將查找結果作爲Web應用程序的一部分,但遇到了一些麻煩。通過javascript函數返回的變量是'undefined'

我有一個按鈕,點擊運行的函數:

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

這DBCHECK功能消失,檢查本地數據庫,看看設置什麼study_mode,在下面的功能:

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

這就是你到了那裏的......有趣支撐的風格。 – 2012-03-29 15:42:48

回答

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.transaction是異步的。

你應該只添加

console.log(dbResult); 

步入回調被傳遞到mydb.transaction