0

在我的 ASP.NET Web 表单应用程序中,我需要执行一些 JQuery 操作来收集表单数据,然后遍历表单数据以保存到 SQLite 数据库,并在成功完成后关闭当前窗口。如果窗口保持打开状态,保存操作可以完美运行,但是一旦我将 window.close 添加到我的 SQLite 事务中的成功回调中,窗口似乎在保存操作有时间完成之前关闭。

function save(closeWindow)
{
  //Gathering form data and creating the checkListInsert string containing my bulk insert statement  (i.e. Insert Into Table Select .... Union Select...)

  db.transaction(function (tx) {

                tx.executeSql(checkListInsert.substring(0, checkListInsert.length - 6), [], function (tx, result) {
                    if (closeWindow == "Yes") {
                        //window.close();  If left uncommented the data will not save.  When left commented the save occurs but of course the window is still open
                    }
                }, onSQLError);
        });
}

编辑:如果我将 window.close() 放在 window.setTimeout() 内 1 秒,一切正常。所以这绝对是一个时间问题。似乎在事务完成之前回调不应该触发?!

4

2 回答 2

0

使用表单中的行数作为预期插入的行数。将其与rowsAffectedby 结果进行比较以验证事务是否完成:

if (closeWindow == "Yes") 
  {
  if (result.rowsAffected === /*Number of rows inserted*/)
    {
    window.close();
    }
  }
于 2013-03-12T21:50:20.387 回答
0

您应该等待事务完成,而不是 executeSql:

function save(closeWindow) {
    db.transaction(function (tx) {
        tx.executeSql(checkListInsert.substring(0, checkListInsert.length - 6), []);
    }, function () { }, function () {
        if (closeWindow == "Yes") {
            window.close();
        }
    });
}
于 2015-12-10T22:14:05.103 回答