我有这个:

var myError;

function getNames(user,location){
    myError=null;

    //Make an Ajax Call (this takes some time)
    //On Success do this:
        if(//Some Condition){
            myError=false;
        }else{
            myError=true
        }
}

function first(){
    getNames(user, location);

    if(myError==false){ //MYCONDITION
        //do some custom stuff just for first();
    }else{
        alert("Failed");
    }
}

function second(){
    getNames(user, location);

    if(myError==false){ //MYCONDITION
        //do some custom stuff just for second();
    }else{
        alert("Failed");
    }
}


现在,当我调用first()或second()时,它总是给我警报消息“ FAILED”。问题在于/// MYCONDITION正在执行getNames()函数之前。我想等待getNames()执行,然后才能检查// MYCONDITION。

我无法设置延迟,因为我不知道getNames()将花费多少时间。我正在考虑使用一些jQquery函数,但似乎找不到一个。

而且,我正在尝试使getNames()尽可能通用。因此,我正在考虑一种不打扰getNames()的方法。

我看到的最后一个选项是将callback()添加到getNames()。但是,该函数也被其他不需要回调()的函数调用。

有什么想法吗?

谢谢。

最佳答案

在jquery中,如果您不喜欢回调(我非常希望您不喜欢:)),那么您很幸运,我的朋友。 $ .ajax()函数中有一个标志,可用于关闭该特定AJAX请求的异步。下面是代码示例:

http://api.jquery.com/jQuery.ajax/

var x = 1;
jQuery.ajax({
     url:    'http://example.com/catalog/create/',
     success: function(result) {
                x = 59;
              },
     async:   false
});

console.log(x);    //Should print 59 instead of 1

09-25 14:50