1

これを行う ajax コールバック関数で、Firefox を現在のアドレスurl_1からurl_2にリダイレクトしようとしています。

window.location = url_2 

このコード行の実行後、アドレス行には同じurl_1が表示されますが、ブラウザのウィンドウには白い画面しか表示されず、この状態でハングします。

同じ否定的な結果でさまざまな方法を試しました:

window.location.assign(url_2)

window.location.replace(url_2)

window.location = url_2
return false;

window.location.href = url_2 

また、window.location の前に alert('something') を挿入すると Firefox が正常に動作し、ダイアログ ウィンドウを閉じた後にurl_2へのリダイレクトが発生することに気付きました。

他のブラウザでは問題なくリダイレ​​クトされます。

この問題を解決するには?

コードの残りの部分:

initializeViewModels = function (data, submitUrl) {

    // Handler of "submit" button click
    $(".submit").click(function () {
        var json = ko.toJSON(window.viewModel);

        //Submiting data to the server
        $.ajax({
            url: submitUrl,
            type: 'POST',
            dataType: 'json',
            data: json,
            contentType: 'application/json; charset=utf-8',
            success: callback
        });
    });

    var callback = function (data) {
        var url_2 = window.myViewUrl + '/' + data.Id.toString();
        window.location = url_2;
    }
};
4

1 に答える 1

1

ハングは、コールバック関数が原因で発生します。AJAX呼び出しが完全に閉じられていないため、要求されたurl_2に到達する前にページをアンロードしようとすると、ガベージコレクターによって問題が発生します。

window.location.replace()AJAXコールバックに直接行を含める代わりに、これを使用して問題を修正onSuccessできますsetTimeout(window.location.replace(),5);。これにより、AJAXクロージャーの外部でタスクが非同期に実行されます。

于 2012-12-03T13:15:15.643 に答える