[英]Asynchronous Javascript
function buildRpt() {
/* Initialize document here */
db.transaction(
function(trn) {
trn.executeSql(
'SELECT * FROM table',
null,
function(trn,result) {
for (var iI = 0; iI < result.rows.length; iI++) {
var row = result.rows.item(iI);
/* Add record data to document here */
trn.executeSql(
'SELECT * FROM detail table WHERE id = ?',
[ row.id ],
function (trn,rslt) {
/* Add detail info to document */
for (var iTmp = 0; iTmp < rslt.rows.length; iTmp++) {
var tmpRow = rslt.rows.item(iTmp);
/* update document */
}
},
errorHandler
);
}
},
errorHandler
);
}
);
}
我需要從客戶端數據庫中獲取信息,並使用它來填充文檔。 我可以遍歷表的記錄,我很好。 但是,當我嘗試執行另一個數據庫查詢以獲取每個記錄的詳細信息時,javascript會異步執行內部查詢。 我看了其他問題,但對於如何完成此任務我還是有些困惑。 在上面的代碼中,嵌套的executeSql是異步處理的。 詳細信息永遠不會出現在文檔中。 有沒有一種方法可以將每個記錄的詳細信息獲取到它所屬的文檔中?
我不確定問題是什么? 如果問題是什么都沒有回來,請使用console.log
查看是否有數據出來。 該問題可能是由於您引用了正在更新的DOM。 如果問題是按特定順序獲取請求,請閱讀以下內容。
很高興看到您是否擁有可用的框架。 由於您是在循環中發出AJAX請求,因此您需要一些東西來同步那些請求,因為您不知道它們將以什么順序返回。 例如,
requestRows ->
rows.each ->
ajax call -> //These return in any order
如果您堅持要執行此框架,請隨意查看延遲的對象,並准備做很多工作。 否則,如果您使用dojo,請使用http://dojotoolkit.org/reference-guide/dojo/Deferred.html或jQuery,我已編寫了以下代碼: https : //gist.github.com/1219564
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.