0

この関数では:

  function ValidateForm()
    {
        var ret = true;

        if ($("#txtName").val().trim().length == 0) { ret = false; $('#txtName').effect("highlight", {}, 1000); }
        if ($("#txtSurname").val().trim().length == 0) { ret = false; $('#txtSurname').effect("highlight", {}, 1000); }
        if ($("#txtUserName").val().trim().length == 0) { ret = false; $('#txtUserName').effect("highlight", {}, 1000); }
        else {
            var pData = {}; pData["username"] = $("#txtUserName").val();
            $.ajax({
                url: 'service.aspx?/isusernameexist/',
                dataType: 'json',
                type: "POST",
                data: pData,
                success: function (data) {

                    if (data[0].cnt > 0) {
                        ret = false; $('#txtUserName').effect("highlight", {}, 1000);
                    }

                }
            });
        }
        return ret;
    }

新しいユーザーを挿入する前にフォームを検証しようとしていますが、ユーザー名が自由に使用できるかどうかを確認するのに時間がかかり、ValidateForm()ajax リクエストが完了する前に関数が値を返します。

このような場合に ajax 機能を適切に実装するにはどうすればよいですか?

4

1 に答える 1

0

このようにすることはできません。Javascript のイベント システムは非同期であり、関数は AJAX 要求が実行され、コールバックがトリガーされる前に常に戻ります。

これを行う別の方法を見つける必要があります。呼び出す関数はValidateForm、JavaScript の非同期性を考慮して書き直す必要があります。それが何をするのか、そして制約の中でそれを機能させる方法を考えてください。

ユーザーにエラーを表示しますか? その場合は、コールバック関数でそのエラーを表示します。

フォームが無効になるか、送信が妨げられますか? その場合は、それをグローバル変数またはデータ属性として保存し、後で送信時に検索できるようにします。

于 2013-01-06T12:04:48.130 に答える