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;
}
}
});
}
I’m sorry if my English isn’t good — English is not my native language.
Back to the topic, why does the function above always return false?
FYI : the JSON is OK
check_usernamecalls an ajax function which starts a networking operation and then returns immediately.check_usernamereturns long before the ajax call finishes and the success handler gets called. Thus, the success handler has NOTHING to do with the value thatcheck_usernamereturns.Since there is no return value in the
check_usernamefunction itself (only in the embedded success handler function),check_usernamereturnsundefinedwhich is a falsey value, thus you think it’s always returning false.If you want to do something with the return value from the success handler, then you have to either operate in the success handler itself or you have to call another function from the success handler. This is how asynchronous operations work.
Returning
trueorfalsefrom the success handler function does nothing. The success handler is called by the internals of the ajax handling code and returning from the success handler just goes into the bowels of the ajax internals. The return value from the success handler is not used in any way.