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时调用的函数