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

Try posting data as data: "login:"+login.val(),

use : instead of =

and also try posting data with '" + + "'

于 2013-03-05T09:11:03.707 回答