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没问题
答案 0 :(得分:4)
check_username
调用ajax函数,该函数启动网络操作,然后立即返回。 check_username
在ajax调用完成之前很久就会返回,并且调用成功处理程序。因此,成功处理程序与check_username
返回的值无关。
由于check_username
函数本身没有返回值(仅在嵌入式成功处理函数中),check_username
返回undefined
这是一个假值,因此您认为它总是返回假。
如果要对成功处理程序的返回值执行某些操作,则必须在成功处理程序本身中操作,或者必须从成功处理程序中调用另一个函数。这就是异步操作的工作原理。
从成功处理函数返回true
或false
不执行任何操作。成功处理程序由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会检查它。添加错误有助于揭示是否确实如此。