包含jQuery $ .post()函数的函数的返回值

我知道AJAX是异步的,所有这一切。 但我有以下代码:

function doesUsernameExist(element) { // Check via AJAX (POST) if username already exists in the database var funcReturned = null; $.post( '_ajax_checkexist.php', { var: 'username', value: element.value }, function(data) { funcReturned = (data.toLowerCase() == 'exists'); }, 'data' ); return funcReturned; } 

我理解为什么函数没有正确返回值,但我可以使用什么作为解决方法? 这是针对Validity插件,它需要doUsernameExist函数返回的布尔值。 我不能做通常的办法,让$ .post函数改变一些HTML元素。 它需要将true / false返回给doesUsernameExist

我可以使用哪种解决方法? 我很难过。

如果这是出于validation目的,您会发现jquery.validate插件及其remote rule完全适合您要实现的目标。

因此,不是编写doesUsernameExist函数,而是担心AJAX的异步性以及如何返回值,您将为表单编写validation规则(实际上这是练习的最终目标=>专注于业务并将管道留给插件) :

 $('#id_of_some_form').validate({ rules: { password: { required: true }, username: { remote: '_ajax_checkexist.php' } } }); 

如果调用是同步的,您可以返回一个值。 这里有一个例子:

同步模式的解决方案:

 function doesUsernameExist(element) { // Check via AJAX (POST) if username already exists in the database var funcReturned = null; $.ajaxSetup({async: false}); $.post( '_ajax_checkexist.php', { var: 'username', value: element.value }, function(data) { funcReturned = (data.toLowerCase() == 'exists'); }, 'data' ); $.ajaxSetup({async: true}); return funcReturned; } 

您的代码的问题是,当$.post正在执行时,该函数继续执行(这是异步的),因此在$.post结束之前将返回null

异步模式的解决方案:
使用异步调用,您不能返回值,但可以调用回调或执行代码。 这可能是异步解决方案:

 function doesUsernameExist(element) { var funcReturned = null; $.post( //This post is asynchronous '_ajax_checkexist.php', { var: 'username', value: element.value }, function(data) { funcReturned = (data.toLowerCase() == 'exists'); userExistanceCallback(funcReturned); }, 'data' ); //We don't return anything } function userExistanceCallback(funcReturned){ if(funcReturned == true) alert("User exists!!"); else alert("User does not exist!!"); } 

希望这可以帮助。 干杯