我在SO上看过类似的问题,但不是我的问题。
我有类似
的东西var x = 5;
if( some condition ){
$.ajax({
url:"...",
success: function(response){
x = response.x;
}
}
}
some other logic
use x variable
正在发生的事情是执行JS的线程在异步任务返回之前获取使用x的逻辑。
通常我会在成功函数中放置任何逻辑但我需要逻辑发生,无论条件是否满足并且我不想复制代码。有人有什么建议吗?我应该只是异步而不是假的吗?
谢谢!
答案 0 :(得分:3)
async false将是一种方法,因为如果条件为真,你希望使用x返回的值。
您也可以使用承诺。
var x = 5;
var ajaxCall;
if(some condition) {
ajaxCall = $.ajax({
url: "...";
});
}
function usingx(x) {
//Add your logic
}
if(typeof(ajaxCall) === 'undefined') {
usingx(x);
} else {
ajaxCall.done(function(data){
usingx(data.x);
});
}
要么是异步错误,要么在两种情况下调用该函数,一种情况是无需等待即可执行,另一种情况则需要等待。
更复杂的方法是等待Ajax完成然后运行该函数。
var x = 5;
var isCallMade = false;
if(some condition) {
isCallMade = true;
ajaxCall = $.ajax({
url: "...";
}).done(function(data){
x = data.x;
}).always(function(){
isCallMade = false;
});
}
function useX() {
if(isCallMade) {
setTimeout(useX, 100); //Wait for ajax call to finish
} else {
//logic using x
}
}
答案 1 :(得分:1)
使用always回调。
if( some condition ){
$.ajax({
url:"...",
success: function(){ // BTW, as of jQuery 1.8 this is referred to as "done"
// Success specific code
},
always: function() {
// Code that always executes regardless of success or failure
}
}
}
答案 2 :(得分:0)
如果Ajax失败,JQuery还会有一个fail()回调函数。我只是把逻辑放在两种情况下。 (抽象成一个函数) 看看这个问题。
jQuery: Handle fallback for failed AJAX Request
**修订
$ .ajax的complete()方法在ajax调用之后运行,无论如何。听起来很完美。 http://api.jquery.com/jquery.ajax/