1

AJAX 呼び出しが完了した後に実行される JavaScript コードがあります。

req.done(function (response, textStatus, jqXHR){
    if (response == "  ok"){
        // values are confirmed
        this.s = this._s
        this.e = this._e
        this.assign = this._assign
        this.y = roomline.snapHeight(this.assign);
        console.log(response)
        drawscreen()

            if (confirm('Would you also like to apply a discount/credit?')){
            var link = "?some_get_request"
            self.location = "assignDiscount.php" + link;
            }

    } else  {
        alert(response)
    }
});

confirm()ご覧のとおり、ダイアログが表示される前に行うべきことがたくさんあります (drawscreen()や などconsole.log)。

問題は、このようなことが確認ダイアログのではなく、直後に発生することです! JavaScript コンソールに「OK」と表示されるはずですが、確認ダイアログで「キャンセル」ボタンを押した後に表示されます。これは意味がありません。ポップアップ ダイアログが表示されている間、「OK」が表示されるはずです。これはなぜですか、どうすれば解決できますか?

4

2 に答える 2

3

あなたが見ている問題は、JavaScript がシングルスレッドであり、confirmブロックしていることです。

console.log、私が知る限り、コンソールが何かをログに記録するための非同期リクエストです。ただし、スクリプトが完了するまで、その要求を送信することはできません。についてもdrawscreen同様です。スクリプトが終了するまで、画面を実際に再描画することはできません。

ifブロックを でラップしてみてください。これにより、通常の操作を妨げる可能性のあることをユーザーが行う時間を与えずにsetTimeout(function() { ... },1);、応答をログに記録し、画面を再描画してから に戻るのに十分な時間をブラウザに与えることができます。confirm

于 2013-06-30T15:28:07.547 に答える