2010-03-12 96 views
0

我在這件事上打了我的頭,我會很樂意提供任何幫助。我需要在數據庫中存儲另一個頁面的上下文(字符串ID列表)。我打開一個包含藝術品列表的頁面,並將該頁面保存到數據庫中的這些artowrks標識符。當我點擊一件藝術作品時,我打開它的網頁,但是我可以訪問數據庫以瞭解上下文並參考下一個和上一個作品。Javascript html5數據庫循環中的數據庫事務問題

這是我的代碼檢索CONTEX:

updateContext = function() { 
    alert("updating context"); 
    try { 
    mydb.transaction(
    function(transaction) { 
    transaction.executeSql("select artworks.number from artworks, collections where collections.id = artworks.section_id and collections.short_name in ('cro', 'cra', 'crp', 'crm');", [], contextDataHandler, errorHandler); 
    }); 
    } catch(e) { 
    alert(e.message); 
    } 
} 

的contextDatahandler功能,那麼在結果迭代,並再次填寫current_context表:

contextDataHandler = function(transaction, results) { 
    try { 
    mydb.transaction(
    function(transaction) { 
    transaction.executeSql("drop table current_context;", [], nullDataHandler, errorHandler); 
    transaction.executeSql("create table current_context(id String);", [], nullDataHandler, errorHandler); 
    } 
    ) 
    } 
    catch(e) { 
    alert(e.message); 
    } 

    var s = ""; 
    for (var i=0; i < results.rows.length; i++) { 
    var item = results.rows.item(0); 
    s += item['number'] + " "; 
    mydb.transaction(
    function(tx) { 
     tx.executeSql("insert into current_context(id) values (?);", [item['number']]); 
    } 
    ) 
    } 
    alert(s); 
} 

的結果是,我得到的current_context表刪除,重新創建和填充,但所有行都填充了LAST藝術作品ID。查詢檢索藝術作品id工作,所以我認爲這是一個交易問題,但我不知道在哪裏。

感謝您的幫助

回答

1

我仍然不明白的地方我的代碼是錯誤的,但我用解決:

contextDataHandler = function(transaction, results) { 
    try { 
     mydb.transaction(
      function(transaction) { 
       transaction.executeSql("drop table current_context;", [], nullDataHandler, errorHandler); 
       transaction.executeSql("create table current_context(id String);", [], nullDataHandler, errorHandler); 
       for(var i=0; i < results.rows.length; i++) { 
        var item = results.rows.item(i); 
        transaction.executeSql("insert into current_context(id) values (?);", [item['number']], nullDataHandler, errorHandler); 
       } 
      } 
     ) 
    } 
    catch(e) { 
     alert(e.message); 
    } 
} 
1

(假設事實,在for循環中,你總能得到results.rows .item(0),而非索引的所有項目,是一個錯字粘貼在問題的代碼),當

你可能會擊中「聲名狼藉循環問題」與變量綁定(由Robert NymanJames Padolsey(原始頁面描述消失,所以鏈接t o Google緩存))。

+0

感謝您的信息 – 2010-03-15 00:08:38