DBをクリアするための一般的なルーチンがあります。
function clearDB() { // Clears the database based on code in the file "db_definition.js".
var dwdb_dfd = $.Deferred();
var idx = 0;
this.maxDeletes = g_sSQL_dropWorkoutDB.length;
this.successCount = 0;
parentThis = this;
do {
$.when(transactDB(g_sSQL_dropDB[idx])).done(function() {
if(parentThis.successCount++ >= parentThis.maxDeletes) dwdb_dfd.resolve();
});
} while (++idx < this.maxDeletes);
return dwdb_dfd.promise();
}
そして、このルーチンは次の場所から呼び出されます。
this.getNextDataSet = function() {
$.when(clearDB()).done(function() {
window.location.href = 'http://'+ document.location.host + '/webDBBuilder.php'
}
WebDBBuilder.phpは、サーバーからデータを読み取り、サーバーDBで利用可能なデータからローカルWebDBをビルド/再構築するファイルです(W3Cにもかかわらず、私たちはこれを放棄するずっと前に開始しました)。このルーチンは、サーバーをポーリングするルーチンが新しいデータが利用可能であることを示すフラグを立てたときに呼び出されます。次に、ローカルDB内の特定のテーブルを破棄します。グローバル変数g_sSQL_dropDBは単にDROP TABLE IF EXISTS tbl_someTable文字列の配列です。
このtransactDB()ルーチンは、渡されたSQLステートメントを実行するもう1つの遅延ベアリング関数です。問題のtransactDB()テーブルが適切に削除され、アプリの残りの部分全体で使用されるため、は必要に応じて機能しています。このgetNextDataSet()関数は、より大きなオブジェクトの一部です。正しく呼び出されています。
問題は、ページジャンプが発生しないことです。clearDB()これは、関数 内のDeferredオブジェクトに関するある種のスコープの問題ですか?
私が見逃しているコードに何かがありますか?done()、resolve()、$。when()。then()を使用してみました。灘。
どんな助けでも深くいただければ幸いです。私はjQueryフォーラムでいくつか質問をしましたが、基本的に応答はありませんでした。そのため、ここではstackoverflowを使用したほうが幸運だと思いました。
<------------追加-------------->
素晴らしい入力をありがとう。私はジュリアンがくれたコードを取りました、そして($ .mapのマイナーな構文スイッチで)それは美しく働きました!
そして、あなたは関数の「this」参照について正しかった。私は以前にクラスからいくつかのコードを引き出して、単に頭のオナラを持っていました。変数「g_sSQL_dropWorkoutDB」は、データベースの構築と削除に使用される変数のみを保持するインクルードファイルに含まれるグローバルです。
ジュリアン、たくさんありがとう!
スコット。