Вставка в базу данных HTML5 с помощью цикла jQuery - PullRequest
0 голосов
/ 14 октября 2010

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) при каждой итерации.Если я добавлю alert () прямо перед переменной 'title' или добавлю переменные в div, все будет работать без проблем.Я не понимаю.

Помогите!

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

Транзакции занимают немного времени, и вы разделяете некоторые глобальные переменные, пропуская ключевое слово 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 голос
/ 14 октября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...