Javascript不是我的强项,所以请原谅我,如果这非常明显。
我正在研究一些创建本地数据库和表的代码,检索RSS提要,解析它,并将每个条目的信息添加到数据库中。
$.ajax({
type: "GET",
url: feedurl,
dataType: "xml",
success: parseXml
});
function parseXml(xml){
$(xml).find("item").each(function(){
title = $(this).find("title").text();
description = $(this).find("description").text();
postype = $(this).find("postype").text();
category = $(this).find("category").text();
guid = $(this).find("guid").text();
postid = $(this).find("postid").text();
url = $(this).find("enclosure").attr('url');
db.transaction(function(tx) {
tx.executeSql('INSERT INTO Posts (title, description, postype, category, guid, postid) VALUES (?,?,?,?,?,?)', [title, description,postype,category,guid,postid]);
});
return true;
});
}
这是问题所在。一切都在进行插入查询。插入查询是插入数据,但每次迭代都使用相同的数据(RSS提要中的最后一项)。如果我在'title'变量之前添加alert()或将变量附加到div,它都可以正常工作。我不明白。
帮助!
答案 0 :(得分:2)
交易需要花费一些时间,并且您通过在声明中遗漏var
关键字来共享一些全局变量。添加var
循环迭代,因为它的拥有变量集应解决问题:
function parseXml(xml){
$(xml).find("item").each(function(){
var $this = $(this),
title = $this.find("title").text(),
description = $this.find("description").text(),
postype = $this.find("postype").text(),
category = $this.find("category").text(),
guid = $this.find("guid").text(),
postid = $this.find("postid").text(),
url = $this.find("enclosure").attr('url');
db.transaction(function(tx) {
tx.executeSql('INSERT INTO Posts (title, description, postype, category, guid, postid) VALUES (?,?,?,?,?,?)', [title, description,postype,category,guid,postid]);
});
});
}
答案 1 :(得分:1)