0

jQueryのUIダイアログを使用して、画面にダイアログ(my-ui-dialog)を描画し、ユーザーにいくつか<input>のsやその他のコントロールを表示しています。ユーザーがダイアログの[ OK ]ボタンをクリックしたときに、UIダイアログでサーバーにAJAX / JSONメッセージを送信し(を介してgetJSON)、サーバーがその呼び出しを処理できるようにし、サーバーからの応答を受信した後でダイアログを閉じます。window.location次に、ユーザーは(経由で)別のWebページにリダイレクトされる必要があります。

これが私のコードです:

$("#my-ui-dialog").dialog({
    modal: true,
    autoOpen: false,
    height: 255,
    width: 300,
    buttons: {
        "OK" : function() {
            var f = $("#fizz").val();

            $.getJSON(
                "/myserver/do-something",
                {
                    fizz: f
                },
                function() {
                    $("#my-ui-dialog").dialog('destroy');
                }
            );

            // When I leave this in the code works great.
            // When I comment the alert out, the getJSON call never
            // hits the server-side.
            alert("Returned from the backend...");

            window.location = "/myserver/some-other-url"
            $(this).dialog("close");
        },
        Cancel : function() {
            $(this).dialog("close");
        }
    }
});

そのalertボックスをそのままにして、(アラートボックスが画面に表示された状態で)数秒待つと、getJSONメソッドはサーバーにアクセスして戻るのに十分な時間があるようです。しかし、私がコメントアウトした場合alert、リクエストはサーバーにヒットすることさえありません。これは、でリッスンしているハンドラーの先頭にログメッセージを追加することでわかります/myserver/do-something。これもJavaWebアプリであり、Tomcatがリクエストを受信したという証拠は見られません。またHTTP、Firebugを使用してデバッグするときにリクエストが生成されていることもわかりません。これらの3つすべては、要求がサーバーにまったくヒットしていないことを示しています。

ここでの私のオプションは何ですか?jQueryを数秒間スリープさせることはできますか?それは醜い解決策のように感じます。jQuery APIを使用するためのより良い方法があるはずです...事前に感謝します!

4

1 に答える 1

4

ダイアログを閉じwindow.locationて、コールバックにコーディングしgetJSONます。そのため、コールバックがあります。

于 2012-12-14T21:29:22.647 に答える