2011-08-30 98 views
1

我正在开发一个使用HTML5和Web数据库存储的应用程序。在主函数回调中获取返回值

我想在一个表中插入的行并返回新的ID(表的主键)创建的使用:

function insertIntoTable(title, text, sketchFileName, categoryId) 
{ 
    var db = window.openDatabase('xxx', '1.0', 'xxx database', 5*1024*1024); 
    var returnedId = -1; 
    db.transaction(
     function (tx) { 
      if (sketchFileName == '') 
      { 
       tx.executeSql('INSERT INTO TableXXX (title, content, created, categoryID) VALUES (?, ?, ?, ?)', 
          [title, text, Date.now(), categoryId], 
          function (transaction, resultSet) { 
           if (resultSet.rowsAffected) { 
            returnedId = resultSet.insertId; 
           } 
          }, handleSQLError); 
      } 
     }, handleSQLError); 
    ); 

    return returnedId; 
} 

但我总是得到-1。我使用Safari开发模式查看表格中的新行。

有什么建议吗?

+0

你可以提醒resultSet.rowsAffected,看看它是真的还是假的。 – DoctorMick

+0

我已经添加了一个提醒,它是真的。 – VansFannel

回答

1

如果您将returnedId的声明移至该函数的外部,然后再次调用该函数,则会看到返回的值是第一个插入的ID,因此它将被设置。它看起来像是,因为数据库是异步的,所以在你的函数返回之后就会设置id,这是有道理的。

根据W3C规范,应该有一个openDatabaseSync可以用来代替openDatabase,但我无法在Safari(5.0.1)中使用它。

很明显,我不知道你的代码看起来像你已经发布的代码片段,但希望你能够重构它,所以你不需要返回值,而是可以管理返回id在回调中。

+0

我稍后需要此ID。也许,用户想编辑文本,我需要它来更新该行。 – VansFannel