2011-10-25 58 views
1

我在運行時創建的SQLite數據庫中執行查詢後顯示結果時出現問題。在Web瀏覽器中存儲SQL數據庫Javascript/HTML5

這裏是我的代碼

創建數據庫

var mydb=false; 

// initialise the database 
initDB = function() { 
    try { 
    if (!window.openDatabase) { 
     alert('not supported'); 
    } else { 
     var shortName = 'APP_DB'; 
     var version = '0.1'; 
     var displayName = 'It Happened Today DB'; 
     var maxSize = 262144; // in bytes, 256kb 
     mydb = openDatabase(shortName, version, displayName, maxSize); 
    } 
    } catch(e) { 
    // Error handling code goes here. 
    if (e == INVALID_STATE_ERR) { 
     // Version number mismatch. 
     alert("Invalid database version."); 
    } else { 
     alert("Unknown error "+e+"."); 
    } 
    return; 
    } 
} 

// db error handler - prevents the rest of the transaction going ahead on failure 
errorHandler = function (transaction, error) { 
    // returns true to rollback the transaction 
    return true; 
} 

// null db data handler 
nullDataHandler = function (transaction, results) { } 

創建表和插入值

// create tables for the database 
createTables = function() { 

    try { 
    mydb.transaction(
     function(transaction) { 
     transaction.executeSql('CREATE TABLE milestones (ID INT(10) NOT NULL, Title VARCHAR(50) DEFAULT NULL, mYear INT(11)  NOT NULL, mMonth INT(11)  DEFAULT NULL, mDay  VARCHAR(10) DEFAULT NULL, mText VARCHAR(2000) NOT NULL, Theme1 VARCHAR(50) DEFAULT NULL, Theme2 VARCHAR(50) DEFAULT NULL, ImageURL VARCHAR(50) DEFAULT NULL, PRIMARY KEY (ID));', [], nullDataHandler, errorHandler); 
     transaction.executeSql('INSERT INTO [milestones] ([ID], [Title], [mYear], [mMonth], [mDay], [mText], [Theme1], [Theme2], [ImageURL]) VALUES (2, "Cotton Mather", 1721, 6, 26, "Following the recommendation of Rev. Cotton Mather, Dr. Zabdiel Boylston of Boston completes the first inoculation against smallpox in the U.S., injecting his own son and two of his slaves.", "HIAm", null, "6-26 Cotton Mather3g04597v.jpg");', [], nullDataHandler, errorHandler); 
     transaction.executeSql('INSERT INTO [milestones] ([ID], [Title], [mYear], [mMonth], [mDay], [mText], [Theme1], [Theme2], [ImageURL]) VALUES (6, "New York Hospital", 1771, 6, 13, "New York Hospital, the second in the colonies after the Pennsylvania Hospital, receives a royal charter from King George III under the name Society of the Hospital in the City of New York in America, later changed to Society of New York Hospital.", "HIAm", null, "Default.png");', [], nullDataHandler, errorHandler); 
     }); 

    } catch(e) { 
    /// alert(e.message); 
    return; 
    } 
}; 

TEXT2HTML

milestonesDataHandler = function(transaction, results){ 
    var html = ""; 
    for(var i=0; i < results.rows.length; i++){ 
     var row = results.rows.item(i); 
     html += '<li class="elist"> \ 
     <a href="article.template.html?id=">'+row['id']+'data-transition="none"> \ 
      <img src="img/">'+row['ImageURL']+'" height="70" width="70" /> \ 
      <h4>'+row['Title']+'</h4> \ 
      <p>'+ dateFormat($row['mYear']+' '+$row['mMonth']+' '+$row['mDay'])+'</p> \ 
     </a> \ 
     </li>'; 
    } 
} 

執行查詢

loadMilestones = function(){ 
try { 
    mydb.transaction(
     function(transaction){ 
      transaction.executeSql("SELECT * FROM milestones", [], milestonesDataHandler, errorHandler); 
     }); 
} 
catch(e) { 
    alert(e.message); 
    } 

}

放在HTML文件I DO的終結:

<script>$("div.miles").html(milestonesDataHandler);</script> 

沒有得到顯示。當我轉到Chrome調試器時,它會顯示:131 Uncaught TypeError:無法讀取未定義的屬性「長度」。

這是指TEXT2HTML部分的第3行。看起來由於某種原因,結果變量沒有被填充。

請你幫我解決這個問題。

由於

+0

你不需要調用'loadMilestones'而不是'milestonesDataHandler'嗎? –

+0

否Manuel,使用SQL語句回調處理查詢結果。檢查規格在這裏http://www.w3.org/TR/offline-webapps/ – locorecto

回答

0

createTables沒有被調用,所以不被創建或與任何結果填充顯示milestonesDataHandler被調用之前該表。

相關問題