我想通过调用true
从$ .post获得false
或abc()
。我找到了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
}
答案 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;
}