我的代码遇到了这个问题。我有一个函数执行AJAX调用并启动接口,并且AJAX在不同的函数中分离。我在某个地方调用它,一些代码跟着它。这是一个例子:
function doAjaxStuff(){
//do something
}
function anotherFunction(){
doAjaxStuff();
//proceed with further code
}
(函数anotherFunction
正在从$(document).ready
)
由于进一步的代码完全依赖于我正在加载的东西,比如我正在尝试访问一个元素并且它还没有加载,这给了我null值并且没有任何作用。因此,如果我可以等到我在anotherFunction
中调用的函数完全执行,那么我将更容易处理它。我见过promises
如果我没有错,有助于使代码同步(无法理解如何实现)。救救我!
答案 0 :(得分:3)
您可以将回调函数作为参数传递给doAjaxStuff
,并在完成ajax请求时调用它。
function doAjaxStuff(callback) {
$.ajax({
success: function(data) {
// do some stuff with data
callback(data);
}
});
}
function anotherFunction() {
doAjaxStuff(function(data) {
alert(data);
})
}
在JavaScript中,函数也是对象,这意味着它们可以作为参数传递给另一个函数,也可以与任何其他值一起传递。所以在这种情况下,我们在函数callback
中有一个名为doAjaxStuff
的参数。当ajax请求完成后,我们可以调用这个作为参数传递的函数。
答案 1 :(得分:1)
另一种方法是使用deferred
个对象
function doAjaxStuff(){
return $.ajax(...);
}
function anotherFunction() {
$.when(doAjaxStuff()).then(function(){
// other code to run after ajax call
});
}
答案 2 :(得分:0)
尝试这样的事情
$.ajax({
url:"demo_test.txt",
async:false,
success:function(result){
}
});
所有请求都是异步发送的(默认设置为true)。如果需要同步请求,请将此选项设置为false
参考