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

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 に答える
0

挿入されると予想される行数として、フォームの行数を使用します。それを結果と比較してrowsAffected、トランザクションが完了したことを確認します。

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