0

我正在寻找访问存储在我从 XML 中解析出来的数据库中的信息。我正在使用 phonegap (cordova 2.2.0)。我在单击导航栏时调用 queryDB() 以调用该函数以使用从 XML 解析的信息填充 div。我的问题是没有显示信息。

有人知道为什么吗?下面是我的代码:

点击时

<a href="#acceptedOrders" onclick("queryDB();")> <img src="Images/acceptedOrders.gif" width="25%"> </a>

这是一个将 XML 读入数据库的 javascript 函数:

var db = openDatabase('PhoneGap_db', '1.0', '', 2 * 1024 * 1024);
db.transaction(function (tx) {
  tx.executeSql('CREATE TABLE IF NOT EXISTS orders (id unique, city, state, zip)');
});


db.transaction(function (tx) {
   tx.executeSql('INSERT INTO orders (id, city, state, zip) VALUES (orderId,city,state,zip)');
});

$.ajax({
    type: "GET",
    url: "testOrders.xml",
    dataType: "xml",
    success: function(xml) {
      $(xml).find('order').each(function(){
        orderId = $(this).find("orderId").text();
        city = $(this).find("city").text();
        state = $(this).find("state").text();
        zip = $(this).find("zip").text();
        db.transaction(function (tx) {
           tx.executeSql('INSERT INTO orders (id, city, state, zip) VALUES ('+ orderId +', '+ city + ', ' + state + ', ' + zip + ')');
        });
            });
        }
     }); 

这是我的阅读脚本(不工作)

function queryDB(tx) {
  tx.executeSql('SELECT orderId FROM orders', [], querySuccess, errorCB);
}
function querySuccess(tx, results) {
  var len = results.rows.length;
  for (var i=0; i<len; i++){
      $('#acceptedOrdersContent').append('<li><a href="#CompleteOrderInfo">'+results.rows.item(i).orderId+'</a></li>').listview("refresh");
  }
};
function errorCB(err) {
  console.log("Error processing SQL: "+err.code);
}

这是一个示例 XML 文件:

    <?xml version="1.0" encoding="UTF-8"?>
     <orders>
        <order>
         <orderId>123456789</orderId>
         <city>Cincinnati</city>
         <state>Ohio</state>
        <zip>45451</zip>
    </order>
 </orders> 

感谢大家!

4

1 回答 1

1

首先,你的 html 是错误的,你应该使用 onclick="" 而不是 onclick(""),像这样:

<a href="#acceptedOrders" onclick="queryDB();">
  <img src="Images/acceptedOrders.gif" width="25%">
</a>

此外,您的 queryDB 函数需要一个未传递的参数。您应该将其更新为如下内容:

function queryDB() {
  db.transaction(function (tx) {
    tx.executeSql('SELECT orderId FROM orders', [], querySuccess, errorCB);
  });
}

请记住,这应该与创建 db 对象的上下文相同

于 2012-12-07T20:21:35.980 回答