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

Why does my jQuery AJAX function always return false?

本文关键字:返回 false 函数 我的 jQuery AJAX 为什么      更新时间:2023-09-26
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是OK

check_username调用一个ajax函数,该函数启动一个网络操作,然后立即返回。check_username早在ajax调用结束和成功处理程序被调用之前就返回了。因此,成功处理程序与check_username返回的值无关。

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

如果你想对成功处理程序的返回值做一些事情,那么你必须在成功处理程序本身中操作,或者你必须从成功处理程序中调用另一个函数。这就是异步操作的工作方式。

从成功处理函数返回truefalse没有任何作用。成功处理程序由ajax处理代码的内部调用,从成功处理程序返回到ajax内部。没有以任何方式使用成功处理程序的返回值。

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

如果我不得不猜测,您发布,并且返回的响应是一个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/