2011-10-25 60 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被调用之前该表。

相关问题