jQuery-从回调函数(在后请求中)返回值到函数内部?
我有一个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
编辑:例如,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形式的事件调用的函数:
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
从中停止提交表单?
回答:
除非您进行 同步 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();
}
}
更改为使用有问题的代码。
更新与发布的其他代码一起使用。 为了清楚起见,将答案缩小到命名函数。
以上是 jQuery-从回调函数(在后请求中)返回值到函数内部? 的全部内容, 来源链接: utcz.com/qa/413872.html