为什么我的jQuery AJAX函数总是返回false?

时间:2011-09-27 03:10:27

标签: javascript jquery function

function check_username(){
    $.ajax({
        type: "POST",
        dataType: 'json',
        url: "/ajax/check/username.html",
        data: "via=ajax&username="+$('input[name=register_username]').val(),
        success: function(msg){
            if(msg.response==false){
                register_username.parent().css('background-color','#db2e24');
                register_username.parent().parent().find('td:last-child').text(msg.message);
                register_username.focus();
                return false;
            } else {
                register_username.parent().css('background-color','#fff');
                register_username.parent().parent().find('td:last-child').text("");
                return true;
            }
       }
    });
}

如果我的英语不好,我很抱歉 - 英语不是我的母语。 回到主题,为什么上面的函数总是返回false? 仅供参考:JSON没问题

3 个答案:

答案 0 :(得分:4)

check_username调用ajax函数,该函数启动网络操作,然后立即返回。 check_username在ajax调用完成之前很久就会返回,并且调用成功处理程序。因此,成功处理程序与check_username返回的值无关。

由于check_username函数本身没有返回值(仅在嵌入式成功处理函数中),check_username返回undefined这是一个假值,因此您认为它总是返回假。

如果要对成功处理程序的返回值执行某些操作,则必须在成功处理程序本身中操作,或者必须从成功处理程序中调用另一个函数。这就是异步操作的工作原理。

从成功处理函数返回truefalse不执行任何操作。成功处理程序由ajax处理代码的内部调用,并且从成功处理程序返回只是进入ajax内部的内部。成功处理程序的返回值不会以任何方式使用。

答案 1 :(得分:0)

问题是逻辑条件msg.response == false ..这总是计算为false,响应不是布尔值。您需要检查响应状态。

答案 2 :(得分:0)

如果我不得不猜测,你发帖,返回的响应是一个JSON对象。但看起来你只是检查你是否得到了有效的回复。为什么不这样试试呢:

试试这个:

function check_username()
        {
            $.ajax({
                type: "POST",
                dataType: 'json',
                url: "/ajax/check/username.html",
                data: "via=ajax&username="+$('input[name=register_username]').val(),
                success: function( msg, textStatus )
                {
                    if ( textStatus == "success" )
                    {
                        register_username.parent().css('background-color','#db2e24');
                        register_username.parent().parent().find('td:last-child').text(msg.message);
                        register_username.focus();
                        return false;
                    } else {
                        register_username.parent().css('background-color','#fff');
                        register_username.parent().parent().find('td:last-child').text("");
                        return true;
                    }
                },
                error: function( jqXHR, textStatus, errorThrown )
                {
                    if ( textStatus == "parsererror" )
                    {
                        alert( "There is an error in your JSON object" );
                    }
                }
            });
        }

你可能遇到的另一个问题是你没有返回有效的json,jQuery会检查它。添加错误有助于揭示是否确实如此。

现场演示http://jsfiddle.net/khalifah/4q3EJ/

相关问题