未捕获的ReferenceError:dbb未在file:///android_asset/www/index.html(Phonegap)中定义

时间:2012-12-14 13:22:13

标签: cordova

我有一个用Phonegap编写的基本代码,它在sql lite表中插入值。但是,当我尝试按下此操作的按钮时,日志显示消息:“未捕获的ReferenceError:dbb未定义在file:///android_asset/www/index.html:116”。 html文件中的所有代码都是:

<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=default-width; user-scalable=no" />
   <meta http-equiv="Content-type" content="text/html;charset=utf-8">

   <title>Embedded Sql Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova-2.2.0.js"></script>

        <script type="text/javascript" charset="utf-8" src="js/jquery-1.8.2.js"></script>

<!-- main scripts used in this example -->
 <script type="text/javascript" charset="utf-8">

var db;
var shortName = 'WebSqlDB';
var version = '1.0';
var displayName = 'WebSqlDB';
var maxSize = 65535;

function errorHandler(transaction, error) {
   alert('Error: ' + error.message + ' code: ' + error.code);

}

function successCallBack() {
   alert("DEBUGGING: success");

}

function nullHandler(){};


function onBodyLoad(){

alert("DEBUGGING: we are in the onBodyLoad() function");

 if (!window.openDatabase) {

   alert('Databases are not supported in this browser.');
   return;
 }

 db = openDatabase(shortName, version, displayName,maxSize);

 db.transaction(function(tx){

  // you can uncomment this next line if you want the User table to be empty each time the application runs
  // tx.executeSql( 'DROP TABLE User',nullHandler,nullHandler);

   tx.executeSql( 'CREATE TABLE IF NOT EXISTS User(UserId INTEGER NOT NULL PRIMARY KEY, FirstName TEXT NOT NULL, LastName TEXT NOT NULL)', [],nullHandler,errorHandler);
 },errorHandler,successCallBack);

}

function ListDBValues() {

 if (!window.openDatabase) {
  alert('Databases are not supported in this browser.');
  return;
 }

 $('#lbUsers').html('');

 db.transaction(function(transaction) {
   transaction.executeSql('SELECT * FROM User;', [],
     function(transaction, result) {
      if (result != null && result.rows != null) {
        for (var i = 0; i < result.rows.length; i++) {
          var row = result.rows.item(i);
          $('#lbUsers').append('<br>' + row.UserId + '. ' +
row.FirstName+ ' ' + row.LastName);
        }
      }
     },errorHandler);
 },errorHandler,nullHandler);

 return;

}

function AddValueToDB() {

 if (!window.openDatabase) {
   alert('Databases are not supported in this browser.');
   return;
 }

 db.transaction(function(transaction) {
   transaction.executeSql('INSERT INTO User(FirstName, LastName) VALUES (?,?)',[$('#txFirstName').val(), $('#txLastName').val()], nullHandler,errorHandler);
   });

 ListDBValues();

 return false;

}

</script>
</head>
<body onload="onBodyLoad();">
<h1>WebSQL</h1>
<input id="txFirstName" type="text" placeholder="FirstName">
<input id="txLastName" type="text" placeholder="Last Name">
<input type="button" value="Add record" onClick="AddValueToDB();">
<input type="button" value="Refresh" onClick="ListDBValues();"> <br>
<br>
<span style="font-weight:bold;">Currently stored values:</span>
<span id="lbUsers"></span>
</body>
</html> 

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

所以看起来你打电话给openDatabase很好。但是,如果您查看来自Cordova(http://docs.phonegap.com/en/2.2.0/cordova_storage_storage.md.html#openDatabase)的示例,您会注意到该示例正在侦听deviceready事件,而不是等待正文加载。当deviceready事件触发时,表示Cordova API已准备好使用。当主体加载时,这意味着WebClient已完成加载页面,但不保证其他所有内容都已准备就绪。