我有一个JavaScript函数,可将数据发布到验证脚本并从那里获取值。post请求上的回调函数返回一个布尔值,而我试图获取 整个 函数以返回该布尔值。现在,回调函数返回正确的值,但是函数本身不返回任何值。这是代码:
function validate(request_type, request_text) { $.post("http://www.example.com/ajax/validate.php",{ type: request_type, text: request_text }, function(data) { return (data == "valid"); }); }
我意识到这有点像“同步”调用,而这并不是AJAX的目的,但是我已经在validate.php(数据库调用等)中拥有许多我无法在Javascript中实现的功能,我看到了线程像这一个是谈使用某种形式的处理程序。
我如何编写一个简单的处理程序,当在语句中使用变量data或布尔比较的结果时,该处理程序才可用?data == "valid"``if/else
data
data == "valid"``if/else
编辑:例如,if将使用布尔结果的语句之一:
if
if (!validate('password',pass_new)) { $('#pass_new').addClass('error'); $('#pass_confirm_new').addClass('error'); $(error_string.format('Please enter a valid password.')).insertAfter('#pass_confirm_new'); $('#pass_text_short').hide(); $('#pass_text_long').show();
编辑:用onsubmit我的HTML形式的事件调用的函数:
onsubmit
function valid_pass_sett() { //code to remove errors left over from previous submissions - snipped pass_old = $('input[name=pass_old]').val(); pass_new = $('input[name=pass_new]').val(); pass_confirm_new = $('input[name=pass_confirm_new]').val(); //some if statements that don't involve AJAX requests - snipped if (!validate('password',pass_new)) { $('#pass_new').addClass('error'); $('#pass_confirm_new').addClass('error'); $(error_string.format('Please enter a valid password.')).insertAfter('#pass_confirm_new'); $('#pass_text_short').hide(); $('#pass_text_long').show(); return false; } return true; }
我尚未编辑此代码以包含已发布的更新代码,但是我的问题是如何return false从中停止提交表单?
return false
除非您进行 同步 AJAX调用(您可能不想这样做),否则您根本无法做到。
如果在您的代码中的多个位置使用了此函数,则最好的选择是允许它 接收 一个函数。
这样,您实际上是直接将代码传递进来,而不是依赖 从 函数 返回 的结果来在某些代码中使用,因此可以确保使用响应。
var my_form = $('#my_form'); my_form.submit( valid_pass_sett ); function valid_pass_sett() { //code to remove errors left over from previous submissions - snipped pass_old = $('input[name=pass_old]').val(); pass_new = $('input[name=pass_new]').val(); pass_confirm_new = $('input[name=pass_confirm_new]').val(); validate('password', pass_new, pswd_validation_callback); // async validation return false; // cancel form submission } function validate(request_type, request_text, callback ) { $.post("http://www.example.com/ajax/validate.php",{ type: request_type, text: request_text }, callback ); } function pswd_validation_callback( data ) { if ( data === 'valid' ) { // if valid, call the native .submit() instead of the jQuery one my_form[ 0 ].submit(); } else { // Otherwise do your thing for invalid passwords. // The form has already been canceled, so no concerns there. $('#pass_new').addClass('error'); $('#pass_confirm_new').addClass('error'); $(error_string.format('Please enter a valid password.')).insertAfter('#pass_confirm_new'); $('#pass_text_short').hide(); $('#pass_text_long').show(); } }
编辑: 更改为使用有问题的代码。
编辑: 更新与发布的其他代码一起使用。 为了清楚起见,将答案缩小到命名函数。