我在使用以下功能时遇到麻烦。目的是从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/