jquery - 从回调函数(在post请求中)返回值到其内部的函数中?

Ric*_*ano 3 javascript ajax jquery callback

我有一个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");
    });
}
Run Code Online (Sandbox Code Playgroud)

我意识到这是一种"同步"调用,这不是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();
Run Code Online (Sandbox Code Playgroud)

编辑: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;
}
Run Code Online (Sandbox Code Playgroud)

我没有编辑此代码以包含已发布的更新代码,但我的问题是我是如何return false通过它来停止表单提交的?

haz*_*zik 7

function validate(request_type, request_text, callback) {
    $.post("http://www.example.com/ajax/validate.php",{
        type: request_type, 
        text: request_text
    }, function(data) {
        callback(data == "valid");
    });
}
Run Code Online (Sandbox Code Playgroud)

用法是:

validate(request_type, request_text, function (isValid) {
    if(isValid) { 
        // do something
    } else {
        // do something if invalid
    }
});
Run Code Online (Sandbox Code Playgroud)