我也见过类似的问题,但不是我的问题。
我有一件事
var x = 5;
if( some condition ){
$.ajax({
url:"...",
success: function(response){
x = response.x;
}
}
}
some other logic
use x variable正在发生的事情是执行JS的线程在异步任务返回之前到达使用x的逻辑。
通常,我只会将任何逻辑放入成功函数中,但是无论条件是否满足,我都需要逻辑发生,我不想复制代码。有人有什么建议吗?我应该只是异步错误吗?
谢谢!
发布于 2015-03-14 03:35:42
如果条件为true,异步false将是一种方法,因为如果条件为true,则希望使用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);
});
}它要么是异步false,要么是在两种情况下调用该函数,一种情况是它可以不等待就执行,另一种情况是它必须等待。
更复杂的方法是等待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
}
}发布于 2015-03-14 03:55:18
使用始终回调。
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
}
}
}发布于 2015-03-14 03:34:57
JQuery也有一个also ()回调,以防Ajax失败。我只是把逻辑放在两种情况下。(抽象为一个函数)检查这个问题。
**修订
无论如何,$. ajax的完整()方法都会在ajax调用之后运行。听起来很完美。http://api.jquery.com/jquery.ajax/
https://stackoverflow.com/questions/29045018
复制相似问题