在javascript中同步运行ajax请求?

在javascript中同步运行ajax请求?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我的代码有这个问题。我有一个函数执行AJAX调用并打开接口,AJAX在不同的函数中被分离。我在某个地方调用它,后面跟着一些代码。以下是一个例子: function doAjaxStuff(){ //do something } function anotherFunction(){ doAjaxStuff(); //proceed with further code } (正在从$(document.ready)调用另一个函数。) 因为进一步的代码完全依赖于我正在加载的东西,比如我试图访问一

我的代码有这个问题。我有一个函数执行AJAX调用并打开接口,AJAX在不同的函数中被分离。我在某个地方调用它,后面跟着一些代码。以下是一个例子:

function doAjaxStuff(){
//do something
}

function anotherFunction(){
doAjaxStuff();
//proceed with further code
}
(正在从
$(document.ready
)调用另一个函数
。)


因为进一步的代码完全依赖于我正在加载的东西,比如我试图访问一个元素,但它还没有加载,这给了我空值,什么都不起作用。因此,如果我可以等到我在
另一个函数中调用的函数
完全执行,那么我就更容易处理它了。我已经看到了
承诺
如果我没有错,这有助于使代码同步(无法理解如何实现)。帮帮我

试试这样的东西

      $.ajax({
        url:"demo_test.txt",
        async:false,
        success:function(result){
        }
     });
所有请求都是异步发送的(即默认情况下设置为true)。如果需要同步请求,请将此选项设置为false

参考文献


试试这样的方法

      $.ajax({
        url:"demo_test.txt",
        async:false,
        success:function(result){
        }
     });
所有请求都是异步发送的(即默认情况下设置为true)。如果需要同步请求,请将此选项设置为false

参考文献


您可以将回调函数作为参数传递给
doAjaxStuff
,并在ajax请求完成时调用它

function doAjaxStuff(callback) {
    $.ajax({
        success: function(data) {
            // do some stuff with data
            callback(data);
        }
    });
}

function anotherFunction() {
    doAjaxStuff(function(data) {
        alert(data);
    })
}

在JavaScript中,函数也是对象,这意味着它们可以作为参数传递给另一个函数,就像您可以处理任何其他值一样。因此在本例中,我们在函数
doAjaxStuff
中有一个名为
callback
的参数。当ajax请求完成时,我们可以调用这个作为参数传递的函数。

您可以将回调函数作为参数传递给
doAjaxStuff
,并在ajax请求完成时调用它

function doAjaxStuff(callback) {
    $.ajax({
        success: function(data) {
            // do some stuff with data
            callback(data);
        }
    });
}

function anotherFunction() {
    doAjaxStuff(function(data) {
        alert(data);
    })
}
在JavaScript中,函数也是对象,这意味着它们可以作为参数传递给另一个函数,就像您可以处理任何其他值一样。因此在本例中,我们在函数
doAjaxStuff
中有一个名为
callback
的参数。ajax请求完成后,我们可以调用作为参数传递的函数。

另一种方法是使用对象

另一种方法是使用对象



请阅读文档。你甚至知道你要找的词。不过,要注意Ajax调用的是同步的,而要考虑异步地使用成功函数来实现它。这并不会阻止其余javascript的运行。是的,ajax调用正在成功加载接口。但是我正试图通过
getElementById
访问ajax调用加载的元素,这在firefox上非常有效,但在chrome上它会产生一个空值。我需要查看代码来找出可能出现的错误@如果您在成功函数中移动所有依赖于ajax调用的代码,Guillerme的答案应该很好。请阅读文档。你甚至知道你要找的词。不过,要注意Ajax调用的是同步的,而要考虑异步地使用成功函数来实现它。这并不会阻止其余javascript的运行。是的,ajax调用正在成功加载接口。但是我正试图通过
getElementById
访问ajax调用加载的元素,这在firefox上非常有效,但在chrome上它会产生一个空值。我需要查看代码来找出可能出现的错误@如果您在成功函数中移动依赖于ajax调用的所有代码,Guillerme的回答应该可以很好地工作。我不需要向服务器发出同步请求,但我需要完成ajax部分,只有在完成该部分之后,才能在函数调用后继续执行下一个代码。我建议不要使用此选项,因为同步ajax请求会在运行时阻塞用户界面服务器没有响应。我只是希望先完成对
doAjaxStuff
的调用,然后继续执行调用下面的代码。@Cruze-您所描述的正是这个答案的作用-但出于所述原因,这不是一个好主意。最好的选择如另一个答案中所述。我不需要向服务器发出同步请求,但我需要完成ajax部分,然后在函数调用后继续执行下一个代码。我建议不要使用此选项,因为同步ajax请求会在服务器没有响应时阻塞用户界面。我只希望对
doAjaxStuff
的调用首先完成,然后应该继续执行调用下面的代码。@Cruze-您所描述的正是这个答案将要做的事情-但出于所述原因,这不是一个好主意。最好的选择如另一个答案所述。@Cruze我在文章末尾添加了更多的解释,也许它可以澄清一点。@Cruze我在文章末尾添加了更多的解释,也许它可以澄清一点。我首先尝试了实现。没有足够的运气把它做好。谢谢,现在终于起作用了,这很有道理:)我一开始就试着实现了。没有足够的运气把它做好。谢谢,现在终于起作用了,这很有道理:)