Javascript 检查ajax调用完成情况

Javascript 检查ajax调用完成情况,javascript,jquery,ajax,Javascript,Jquery,Ajax,我在使用ajax填充和访问全局变量时遇到问题。我有以下代码(稍微精简): 我的问题如下:当我在done函数中记录answers时,它给了我一个很好的数组。这意味着数组变量已填充。但是当我从$(document.ready记录它时,它返回一个空变量。这可能是因为AJAX调用是异步的,并且在填充变量之前执行日志 但是,我需要在另一个页面上使用该变量,因此我需要从$(文档)访问它。。。知道如何检查变量是否已填充吗?或者当showResults()完成时?提前感谢您的帮助 编辑- 谢谢你的回复!但我

我在使用ajax填充和访问全局变量时遇到问题。我有以下代码(稍微精简):

我的问题如下:当我在
done
函数中记录
answers
时,它给了我一个很好的数组。这意味着
数组
变量已填充。但是当我从
$(document.ready
记录它时,它返回一个空变量。这可能是因为AJAX调用是异步的,并且在填充变量之前执行日志

但是,我需要在另一个页面上使用该变量,因此我需要从
$(文档)访问它。。。知道如何检查变量是否已填充吗?或者当
showResults()
完成时?提前感谢您的帮助

  • 编辑-
谢谢你的回复!但我仍在努力解决以下问题:据我所知,我可以从ajax回调调用另一个函数,并将数据传递给它。问题是,在调用之后,我必须对它做很多不同的事情,现在唯一能让它工作的方法是在ajax回调中调用一个函数,然后从该回调调用另一个函数,等等


所以我最终得到了
showResults()doc.ready
中的code>,然后执行许多“链接”在一起的函数。我是否可以将数据返回到变量,以便在其他地方使用?我希望我已经说清楚了,对不起,英语不是我的母语。

检查文档是否成功:只有在成功回调后才会执行此操作

var answers;

$(document).ready(function() {
   showResults();
}

function showResults(){
    $.ajax({
        url: "/wp-content/themes/hoekiesikeenschool/question-storage.php",
        data: { action: "get_results" },
        type: "post",
        dataType: "json"
    }).when(function (data) {
       console.log(answers);
        answers = data.questionary; 
        return answers;

    }); 
}

在AJAX调用后执行依赖于
answers
数组的功能。从
done(…)

一个非常粗略的想法:

var answers;

function functionalityDependentOnAnswers() {
   //the code dependent on answers array.
}

$(document).ready(function() {

   showResults();

   //Move code here to functionalityDependentOnAnswers()
}

function showResults(){
    $.ajax({
        url: "/wp-content/themes/hoekiesikeenschool/question-storage.php",
        data: { action: "get_results" },
        type: "post",
        dataType: "json"
    }).done(function (data) {

        answers = data.questionary; 
        functionalityDependentOnAnswer();

    }); 
}

您可以使用jQuery(查看)提供的
when
方法


或者看看类似情况的解释。

你的方法是正确的

在DOM回调中处理答案

var answers;
$(document).ready(function() {
   showResults();
}

function showResults(){
    $.ajax({
        url: "/wp-content/themes/hoekiesikeenschool/question-storage.php",
        data: { action: "get_results" },
        type: "post",
        dataType: "json"
    }).done(function (data) {
        answers = data.questionary;
        console.log(answers);
        // Manage answers here
    }); 
}

想法:有一个隐藏的输入字段,并向其中添加更改侦听器

<input type="hidden" id="answers_input" />

解决方案有点像黑客,让我知道这是否对您有效,因为他想检查通话何时结束,而不是通话是否正确结束。
async:false
是一个非常糟糕的建议!从1.8版开始,不推荐使用
asnyc:false
,我同意你们的观点,最好的方法是第一个解决方案!我删除了第二个,我知道这是一个坏主意,但并不是说它被否决了,谢谢!通常情况下,可以通过回调完成操作,因此您可能不必访问doc.ready中的变量。你能解释一下“在其他页面上使用该变量”吗?谢谢你的回复!我的问题是,我必须用从ajax调用中获得的数据做很多事情。也许是我缺乏经验,但我只能通过调用回调函数中的另一个函数,然后再调用该函数中的另一个函数来让它工作,等等。。。我希望ajax调用只填充一个变量,我可以在多个地方使用它。我希望我说清楚,英语不是我的母语:(我也更新了我的问题。
<input type="hidden" id="answers_input" />
var answers;

$(document).ready(function() {
    $('#answers_input').on('change', function() {
     // trigger your custom code
     console.log(answers);
    })
   showResults();

   console.log(answers);

}

function showResults(){
    $.ajax({
        url: "/wp-content/themes/hoekiesikeenschool/question-storage.php",
        data: { action: "get_results" },
        type: "post",
        dataType: "json"
    }).done(function (data) {
        answers = data.questionary; 
        $('#answers_input').val(answers);
    }); 
}