为什么我的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。
如果要对成功处理程序的返回值执行某些操作,则必须在成功处理程序本身中操作,或者必须从成功处理程序中调用另一个函数。 这是异步操作的工作方式。
从成功处理函数返回true
或false
不会做任何事情。 成功处理程序由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/