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

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没问题

check_username调用ajax函数,该函数启动网络操作,然后立即返回。 check_username在ajax调用完成之前返回很长时间并调用成功处理程序。 因此,成功处理程序与check_username返回的值没有任何关系。

由于check_username函数本身没有返回值(仅在嵌入式成功处理函数中), check_username返回undefined ,这是一个falsey值,因此您认为它总是返回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/