非常抱歉不得不求助于在论坛上提问,但我一整天都试图解决这个问题。
我有一个phonegap应用程序,它创建一个SQLite数据库,创建一个表,从tinternet获取JSON提要,然后将该数据提供给表。
在应该填充数据库的位之前,一切似乎都很好。 “insertProperty”函数无法运行。任何帮助都会非常棒!
以下是相关的代码段。
x$(document).on('deviceready', function () {
// CREATE DATABASE
var localDatabase = window.sqlitePlugin.openDatabase("localDB", "1.0", "Local DB", 5000000);
console.log("Database Loaded");
// CREATE properties TABLE
var query = "CREATE TABLE IF NOT EXISTS properties (propertyid INT, propertytype text, address text, postcode text, clientid INT);"
db.transaction(function (trxn) {
trxn.executeSql(query, [], callback,
function (transaction, error) { //error callback
console.log(error);
});
});
}
function insertProperty(db, data) {
var query = "INSERT INTO properties (propertyid, propertytype, address, postcode, clientid) VALUES (?,?,?,?,?);"
db.transaction(function (trxn) {
trxn.executeSql(query,[data.propertyid, data.propertytype, data.address, data.postcode, data.clientid],
function (transaction, resultSet) {
console.log('success');
},
function (transaction, error) {
console.log(error);
}
);
});
}
x$().xhr("http://myurl.com", { // GET JSON FEED
async: true,callback: function () { try {
var dataArray = JSON.parse(this.responseText); // PARSE JSON FEED
console.log("Loading live data");
dataArray.forEach(function (thedata) { // LOOP DATA
console.log(thedata.address);
insertProperty(localDatabase, thedata);
});
console.log("Rendering Live Data");
renderDataset(dataArray)
} catch (e) { // failed to retrieve data
console.log("There was a problem, Loading local data");
getStoredProperties(localDatabase, function (offlineData) {
renderDataset(offlineData);
});
}
}
});
脚本运行到“console.log(thedata.address);”并向我显示一个地址但是一旦它尝试运行insertProperty函数,它就会退出并直接进入“console.log(”存在问题,加载本地数据“);”位。
再次感谢您提供的任何帮助。 丹
答案 0 :(得分:0)
显然,你在“deviceready”函数的范围内定义了局部变量localDatabase
,因此当你在xhr回调函数中循环数据时,它是不可访问的。