0

ユーザーがデータベースに存在する場合はFALSEを返し、ユーザーがデータベースに存在しない場合はTRUEを返す関数が必要です。これが私の関数コードです。Firebugは、変数フラグが常に未定義のままであることを示しました。どうすれば修正できますか?

function checkLogin(login, n) { 
        var flag;

        jQuery.ajax({
            type: "POST",
            url: "${pageContext.request.contextPath}/checkLogin.ajax",
            data: "login="+login.val(), 

            success: function(response){
                if (response.status == "EMPTY") {
                    alert('Login is free - you can take it');
                    flag = true;
                } 

                if (response.status == "EXISTS") {              
                    alert('Login already exists in Database');
                    login.addClass( "ui-state-error" );
                    updateTips( n );
                    flag = false;
                }

            }
        });

        return flag;
    }
4

4 に答える 4

0

AJAXは非同期です。returnステートメントは、フラグを変更するためのコールバックコードが完了する前に発生します。関数がフラグを返さないようにロジックを変更する必要がありますが、定義したコールバックにフラグを渡します。

于 2013-03-05T09:08:38.077 に答える
0

いくつかの問題:

  • ajaxは非同期で動作するため、設定を待っている値を返す前に、完了する(したがってフラグを設定する)かどうかを確認することはできません。
  • また、パラメーターのハンドラーを指定しないerrorため、問題が発生した場合は、そのことを知ることができません。
于 2013-03-05T09:08:57.600 に答える
0

フラグを返すことはできません。ajax呼び出しを考慮せずに直接実行されるため、ajax呼び出しが処理されるまで、ajax操作が完了する前にフラグが返されます。うまくいかないだろう

代わりに$.deferredの助けを借りることができます

それを見ろ

于 2013-03-05T09:09:57.523 に答える
-1

次のようにデータを投稿してみてくださいdata: "login:"+login.val(),

=の代わりに:を使用してください

また、'"++"'でデータを投稿してみてください

于 2013-03-05T09:11:03.707 に答える