从对象中检索数据不适用于离子

时间:2015-07-27 18:37:50

标签: javascript ios sql cordova ionic

我已将$cordovaSQLite附加到我的离子应用中。这是代码的基本示例。

function retrieve() {
var q = $q.defer();

var query = 'SELECT user_credentials, user_id FROM Users;';

$ionicPlatform.ready(function (){
  $cordovaSQLite.execute(db, query).then(function(res) {
    if (res.rows.length > 0) {
      console.log("found user");
      console.log(res);
      console.log(JSON.stringify(res));
      q.resolve(res.rows[0]);
    } else {
      console.log("no rows found");
      q.resolve(false);

    }
  }, function (err) {
    q.reject(err);
  });
});

return q.promise;
}

以下是打开数据库的代码。

if(window.cordova) {
  // App syntax
  db = $cordovaSQLite.openDB( "CoolApp.db" );
} else {
  // Ionic serve syntax
  db = window.openDatabase("CoolApp.db", "1.0", "Cool App", -1);
}

当我在Chrome上测试我的应用时,我的日志会显示

rows: SQLResultSetRowList
  0: Object
    user_credentials: "asdf"
    user_id: 234
  length: 1
rowsAffected: 0

但是,当我在iOS应用程序或Safari上运行时查看日志时,我会收到

{"rows":{"length":1},"rowsAffected":0,"insertId":1}

我的问题是为什么我没有收到rows的价值?为什么这适用于浏览器而不适用于iOS?

2 个答案:

答案 0 :(得分:2)

如果返回了多个结果,可以通过使用相应的索引查询rows.item方法来获得结果。

var elements = [];
for (var i = 0; i < result.rows.length; i++) {
    elements.push(result.rows.item(i));
}
return elements;

结果是$ cordovaSQL在其承诺完成时返回的对象。

答案 1 :(得分:1)

您是否尝试为浏览器实例化WebSQL而不是SQLite DB?

您可以随时返回设备的SQLite,但Chrome和Firefox等现代浏览器不支持SQLite。