2011-09-26 97 views
0

我正在研究需要存儲一些數據的iOS上的phonegap應用程序。我正在使用phonegap文檔中給出的存儲API,並且我相信正在插入數據。但是當我試圖使用SELECT語句檢索數據時,我沒有在警報框中獲得任何輸出。無法從phone sql應用程序中的web sql數據庫檢索數據

顯示「loading2」警報,但之後我沒有得到任何輸出。

我的代碼如下(從PhoneGap的維基拾起):

// load the currently selected icons 
    function loadCelebs(mydb) 
    { 
     try 
     { 
      alert("loading2"); 
      mydb.transaction(
       function(transaction) 
       { 
        transaction.executeSql('SELECT * FROM celebs ORDER BY name', [], celebsDataHandler(transaction,results)); 
       }); 
     } 
     catch(e) 
     { 
      alert(e.message); 
     } 
    } 


    // callback function to retrieve the data from the prefs table 

    function celebsDataHandler(tx, results) 
    { 

     // Handle the results 
      alert(results); 

    } 
+0

「沒有得到任何輸出」?這是否意味着你沒有得到一個警戒框?或者你得到一個沒有內容的改變框? –

+0

感謝Joachim,我錯誤地命名了處理程序。由於我認爲不同的處理程序名稱,該部分未被執行。它可能在概念上是如此,但它對我有用。所以現在,我會一起去。感謝您的回覆,雖然:) – ilight

回答

0

嘗試將其更改爲:

mydb.transaction(
      function(transaction) 
      { 
       transaction.executeSql('SELECT * FROM celebs ORDER BY name', [], celebsDataHandler); 
      }); 

你不希望在與(TX,結果)的一部分transaction()調用。您只傳遞對回調處理程序的引用,以便它可以在完成時運行它。通過添加(tx,結果)您正在執行並傳遞結果。

另外,考慮傳入錯誤處理程序。如果您知道錯誤是什麼,它可以使調試更容易。

function errorCB(err) { 
    alert("Error processing SQL: "+err.code); 
} 


mydb.transaction(
    function(transaction) 
    { 
     transaction.executeSql('SELECT * FROM celebs ORDER BY name', errorCB, celebsDataHandler); 
    } 
); 
+0

是的,我正在處理錯誤的處理程序。保持處理程序名稱始終爲我工作。所以我使用「事務」作爲處理程序的名稱,而不是使用「事務」有時和「其他時間」使用「TX」。我認爲處理程序可以只有一個名稱,不同於範圍變量。 – ilight

相關問題