同步在javascript中运行ajax请求?

时间:2014-01-03 12:23:11

标签: javascript jquery ajax

我的代码遇到了这个问题。我有一个函数执行AJAX调用并启动接口,并且AJAX在不同的函数中分离。我在某个地方调用它,一些代码跟着它。这是一个例子:

function doAjaxStuff(){
//do something
}

function anotherFunction(){
doAjaxStuff();
//proceed with further code
}

(函数anotherFunction正在从$(document).ready

调用

由于进一步的代码完全依赖于我正在加载的东西,比如我正在尝试访问一个元素并且它还没有加载,这给了我null值并且没有任何作用。因此,如果我可以等到我在anotherFunction中调用的函数完全执行,那么我将更容易处理它。我见过promises如果我没有错,有助于使代码同步(无法理解如何实现)。救救我!

3 个答案:

答案 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

参考

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