Javascript 如何对$.post使用回调来获取返回的数据(异步函数问题)

Javascript 如何对$.post使用回调来获取返回的数据(异步函数问题),javascript,jquery,function,asynchronous,return,Javascript,Jquery,Function,Asynchronous,Return,我想通过调用abc()从$.post获取true或false。我找到了答案,但我没能找到答案 有人能给我一个简短的例子和我的代码吗 function abc() { form = $('form'); formData = form.serialize(); $.post('file.php', formData, function(result) { form.each(function() { if (result === t

我想通过调用
abc()
从$.post获取
true
false
。我找到了答案,但我没能找到答案

有人能给我一个简短的例子和我的代码吗

function abc() {
    form = $('form');
    formData = form.serialize();

    $.post('file.php', formData, function(result) {
        form.each(function() {
            if (result === this.id) {
                return true;
                error = true;
            }
        });

        if (error === false) { // no error
            return true;
        }
    });
}

if (abc()) {
    // true // <- doesn't work, because $.post is an async function
}
函数abc(){
形式=$(‘形式’);
formData=form.serialize();
$.post('file.php',formData,函数(结果){
form.each(函数(){
if(result==this.id){
返回true;
错误=真;
}
});
如果(错误===false){//无错误
返回true;
}
});
}
if(abc()){

//true/请记住,对
$.post
的调用响应仅在承诺履行时可用

因此,为了获得响应,您必须等待承诺(就像您在
abc
中所做的那样,以便知道返回什么)

记住这一点,您必须在abc中返回承诺,以等待其解决:

function abc() {
    form = $('form');
    formData = form.serialize();

    // Note here we return the promise
    return $.post('file.php', formData, function(result) {
        if (result === 'abc') {
             return true;
        } else {
             return false;
        }
    });
}

// Now we wait for the promise to be resolved
abc().then(function(result) {
    if (result) {
        // Do your thing here!
    }
});

您可以通过返回
promise
值来实现它,然后使用
done
方法检查它

function abc() {
   form = $('form');
   formData = form.serialize();

   return $.post('file.php', formData);
}

abc().done(function(result){
    if(result === 'abc')
    // do something.
});
您也可以像这样使用
Callback
函数

function abc(mycalback) {
    form = $('form');
    formData = form.serialize();

    $.post('file.php', formData, mycalback);
}

function mycalback(response) {
    var result = false;
    form.each(function() {
            if (response=== this.id) {
                return true;
                result = true;
            }
        });
    return result;
}

这是否回答了您的问题?如果您需要任何帮助,请告诉我@xif80599是否可以从abc()返回true或false?我已经更新了我的代码,顺便说一下:)。从我的观点来看,你应该控制
promise
value中的值,而不是回调。这是回调的一个例子。你知道如何在我的例子中使用它吗?我刚刚更新了我的答案,请看一下@xif80599。但是,在你的例子中,返回布尔值没有意义,所以你需要做一些操作如您所愿,而不是返回true/false;现在的问题是,结果总是“true”,因为它向我显示了从php返回的数据,而不仅仅是true或false:/。您今天早些时候问了这个问题,然后它被关闭了。
error=true;
将永远不会被设置,因为它在a之后(无用)return您无法调用abc并测试结果。只需更改代码,将true时的代码移动到true时调用的函数