我有一个Ajax调用函数。如果它返回true,则应运行另一个具有另一个Ajax的函数。但在我的情况下,第一个函数返回true但第二个函数不运行。怎么做?
如果我从第二个函数中移除此if(checkIfCompleted()) {
,它就可以正常工作。但我必须检查第一个函数是否返回true。
我的代码是:
function checkIfCompleted() {
$.ajax(
{
url: Base_URL + "/offers/" + 'checkIfQuoteIsComplete',
type: "POST",
data: {
"offer_id": offer_id
},
success: function (data) {
if(data === 'notcompleted') {
$("#NotCompleteQuotes").modal();
return false;
} else {
return true;
}
},
error: function (data) {
MessageBoxError('Error');
}
});
}

第一个函数返回true后应运行的第二个函数是:
function saveOrEditQuote(status, id) {
if(checkIfCompleted()) {
//my code here - it's long
return false;
}
}

答案 0 :(得分:1)
Javascript是异步的,尝试使用像这样的回调
function checkIfCompleted(callback) {
$.ajax(
{
url: Base_URL + "/offers/" + 'checkIfQuoteIsComplete',
type: "POST",
data: {
"offer_id": offer_id
},
success: function (data) {
if(data === 'notcompleted') {
$("#NotCompleteQuotes").modal();
} else {
callback();
}
},
error: function (data) {
MessageBoxError('Error');
}
});
}
然后
function saveOrEditQuote(status, id) {
checkIfCompleted(function(){
// will be done only on success
//my code here - it's long
return false;
})
}
说明:
回调只是另一个参数,不同之处在于它是一个函数,而不是一个整数。通过使用它们,您可以确保仅在某些内容之后调用某些代码块。它们对需要一些时间的操作(如请求,jquery动画,超时)非常有帮助。
答案 1 :(得分:0)
您所要做的就是将第二个回调函数Boost_LIBRARIES
传递到成功回调的主体中。您需要小心在正确的范围内声明该函数,因为成功回调的范围与saveOrEditQuote()
不同。
此外,成功参数checkIfCompleted
通常是一个对象和字符串数组,因此data
可能会将数组与字符串进行比较。
data === 'notcompleted'