2013-02-22 48 views
3

我堅持用下面的,我敢肯定它做我的缺乏與回調處理,我想查詢數據庫如下經驗:處理JavaScript db.transaction回調

db.transaction(queryFoodDBAll, errorCB); 

function errorCB(tx, err) { 
    alert("Error processing SQL: "+err); 
} 

function queryFoodDBAll(tx) { 
    tx.executeSql('SELECT * FROM Food', [], displayAllFood, errorCB); 
} 

function displayAllFood(tx, results) { 
    var len = results.rows.length; 
    var items = new Array(); 
    for (var i=0; i<len; i++){ 
     items[i] = results.rows.item(i).data 
    } 
    printdata('settings-food',items, 'Food'); 
} 

function printData(type,data,title) { 
    switch(type) 
    { 
     case 'settings-food': 
      alert("Data: "+data); 
      var content = '<div data-role="collapsible" data-theme="c"><h3>'+title+'</h3>'; 
      for (var i=0;i<data.length;i++) { 
       content += '<p>'+data[i]+'</p>'; 
      } 
      content += '</div>'; 
      $("#settings-food").append(content); 
      break; 
} 

現在,當我運行它時,所有信息都被成功檢索,直到我運行printData函數,它給我顯示「錯誤處理SQL:undefined」的錯誤CB。

對此的任何想法?

回答

2

你的問題是返回堆棧:

當你到printData調用棧看起來是這樣的:

----queryFoodDAll 
----executeSQL 
----disiplayAllFood (jump to printData) 
----errorCB 
----printData 

的JavaScript將返回了該調用堆棧;所以當你在路上跳過errorCB時,無論你做什麼,在返回的過程中都會觸發該功能;因爲它是回調堆棧的一部分。

你想要做的是沒有你的errorCB作爲回調函數。

請檢查您的displayAllFood()是否有效的SQL。如果其有效繼續向下通話列表(意思是繼續到printData),但如果其不是有效,則請致電errorCB

+0

謝謝!解決了! – galgo 2013-02-22 22:38:11

+0

@Wigiri沒問題。如果這有助於確定將其標記爲接受的答案。 – Ryan 2013-02-22 22:56:26