我正在开发一个phonegap应用程序,必须与远程mysql服务器同步。
我使用getJson()加载一个json文件,并将这些行插入到websql数据库中。我的问题是只有第一行插入websql DB。我在Json文件中有两行。
这是我的功能:
function loadJson(){
$.getJSON( "http://localhost:8888/results.json", function( data ) {
$.each(data, function(i, item) {
var title=data[i].title;
var content=data[i].content;
var imgurl=data[i].imgurl;
imgName = imgurl.substring(imgurl.lastIndexOf('/'))
db.transaction(function (transaction) {
console.log('we insert' + title); // It works, display me the two different title
transaction.executeSql('INSERT INTO projets (title, content, imgurl) VALUES ("' + title + '","' + content + '", "' + imgurl + '" );'); //Only the first row is inserted
});
});
});
我的代码可能很糟糕,我仍然是“新手”。无论如何,提前谢谢你,抱歉我的英语不好。
答案 0 :(得分:1)
事务意味着一次处理对数据库的许多请求。尝试对所有SQL语句使用一个事务,而不是启动多个事务。
示例(可能需要一些改进):
function loadJson(){
$.getJSON( "http://localhost:8888/results.json", function( data ) {
db.transaction(function (transaction) {
var len = data.length;
for(var i = 0; i < len; i++) {
var title=data[i].title;
var content=data[i].content;
var imgurl=data[i].imgurl;
imgName = imgurl.substring(imgurl.lastIndexOf('/'));
console.log('we insert' + title); // It works, display me the two different title
transaction.executeSql('INSERT INTO projets (title, content, imgurl) VALUES (?,?,?)',[title, content, imgurl]);
}
});
});
}
启动事务时,数据库/表将锁定该实例。如果您调用多个事务,则第一个锁定所有内容,其余事件无法完成。
此外,我已将.each
替换为for
,因为使用for
优于.each