如何在$ .post上使用回调以获取返回的数据(异步函数问题)

时间:2020-02-01 15:02:32

标签: javascript jquery function asynchronous return

我想通过调用true从$ .post获得falseabc()。我找到了this的答案,但是我无法解决这个问题。

有人可以给我一个简短的示例代码吗?

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
}

2 个答案:

答案 0 :(得分:0)

请记住,只有在诺言兑现时,对$.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!
    }
});

答案 1 :(得分:0)

您可以通过返回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;
}