jquery - jQuery Json Cordova问题

标签 jquery json sqlite cordova web-sql

我在使用以下功能时遇到麻烦。目的是从Json feed获取数据,并使用jquery mobile将其添加到脱机数据库中。数据库部分工作正常。 json部分可以很好地获取数据,但由于某种原因无法将其添加到数据库中。

可能是json函数中没有tx.executable方法吗?如果是这样,我该如何解决?

任何想法真的很感激!

function SyncDataQuery(tx) {
    tx.executeSql('DROP TABLE IF EXISTS Picato');
    tx.executeSql('CREATE TABLE IF NOT EXISTS Picato (id unique, date date,am_pm)');

    //code to get Json data from server.

$.ajax({
    url: 'http://url1 2 3',  //fake url.
    dataType: 'jsonp',
    jsonp: 'jsoncallback',
    timeout: 5000,
    success: function(data, status){

        $.each(data, function(i,item){
            var insId = parseInt(item.idservice);
            var insDate = item.date;
            var insTime = item.am_pm;
            //alert(insId + insDate + insTime);
            tx.executeSql('INSERT INTO Picato (id, date, am_pm) VALUES (insId, insDate,insTime)');
        });

    },
    error: function(){
        console.log('There was an error loading the data.');
    }
}); 

}

最佳答案

您的tx对象不能用于在$.ajax回调中执行SQL语句,因为数据库事务已在运行$.ajax回调之前完成。如果对Web SQL数据库对象尝试此操作,将会遇到相同的问题。

解决方案是在$.ajax回调中运行事务。这是我将重做代码的方式(在使用Cordova-sqlite-storage插件的情况下):

// @param db - should be your database object
function SyncDataQuery(db) {
  db.executeSql('DROP TABLE IF EXISTS Picato');
  db.executeSql('CREATE TABLE IF NOT EXISTS Picato (id unique, date date,am_pm)');

  //code to get Json data from server.

  $.ajax({
    url: 'http://url1 2 3',  //fake url.
    dataType: 'jsonp',
    jsonp: 'jsoncallback',
    timeout: 5000,
    success: function(data, status) {
      db.transaction(function(tx) {
        $.each(data, function(i,item) {
          var insId = parseInt(item.idservice);
          var insDate = item.date;
          var insTime = item.am_pm;
          //alert(insId + insDate + insTime);
          tx.executeSql('INSERT INTO Picato (id, date, am_pm) VALUES (insId, insDate,insTime)');
       });
     });

    },
    error: function(){
      console.log('There was an error loading the data.');
    }
  }); 

}


请注意,此代码不包括任何数据库错误检查。

如果您使用的不是Cordova-sqlite-storage插件,则可能需要打开一个新事务以DROP并创建Picato表。

更新:我刚刚发布了一篇博客文章,以描述解决方案以及示例代码和示例项目,网址为:http://www.brodybits.com/cordova/sqlite/api/jquery/2015/10/26/populating-cordova-sqlite-storage-with-the-jquery-api.html

关于jquery - jQuery Json Cordova问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33240009/

相关文章:

java - Blackberry Java Sqlite 多记录插入

database - 如何在空表中获取正确的 DataColumn 数据类型?

javascript - 在选择选项更改时更新跨度值

jquery - 我们如何从长字符串中提取字符串的特定部分?

javascript - li 导航菜单仅每隔一次单击触发我的 .toggleClass

java - 使用 Spring MVC 在 REST HTTP GET 请求中传递 JSON 对象

javascript - jQuery 对话框 : How do I alter the close tag style?

json - 打开网页,全选,复制到工作表

jquery - jQuery getJSON 之后获取数据

javascript - 如何将JS对象添加到Sqlite数据库中