尝试使用返回true或false的函数,并且还包含一些ajax。
我调用一个期望真或假回复的函数:
if(stepIsValid(stepName) == true) {
//Do Something
}
else doSomethingElse();
函数'stepIsValid()'执行多项检查,然后通过AJAX请求其他信息。然后返回true或false:
function stepIsValid(stepName) {
var isValid = true;
if(condition) {
isValid = false;
}
if(condition) {
isValid = false;
}
if(condition) {
isValid = false;
}
if (pub && isbn) {
$.post( "/index.php/mypath", { isbn: isbn, name: pub })
.done(function( data ) {
$("#resultElement").val(data);
isValid = true;
return isValid;
})
.error(function( data ) {
isValid = false;
return isValid;
});
}
else {
isValid = false;
return isValid;
}
我的问题是,当调用stepIsValid时,jQuery不会等待响应,假定为false并在返回true之前调用doSomethingElse()。
解决这个问题的最佳方法是什么?
Code实际上确实返回true但不够快。
这两个函数都在单独的文件中。
(假设条件,酒吧,isbn都被检测并可用)
答案 0 :(得分:3)
尝试:
function stepIsValid(stepName, callback) {
var isValid = true;
if(condition) {
isValid = false;
}
if(condition) {
isValid = false;
}
if(condition) {
isValid = false;
}
if (pub && isbn) {
$.post( "/index.php/mypath", { isbn: isbn, name: pub })
.done(function( data ) {
$("#resultElement").val(data);
isValid = true;
callback(isValid);
})
.error(function( data ) {
isValid = false;
callback(isValid);
});
}
else {
isValid = false;
callback(isValid);
}
并将其用于:
stepIsValid(stepName, function(valid) {
if(valid) {
//Do Something
}
else doSomethingElse();
});
答案 1 :(得分:0)
降低你的功能
试试这个:
function stepIsValid(stepName) {
var isValid = false;
if (pub && isbn) {
$.post( "/index.php/mypath", { isbn: isbn, name: pub })
.done(function( data ) {
$("#resultElement").val(data);
isValid = true;
return isValid;
})
.error(function( data ) {
return isValid;
});
}
}