检查ajax呼叫完成情况

时间:2013-04-16 11:01:49

标签: javascript jquery ajax

我在使用ajax填充和访问全局变量时遇到问题。我有以下代码(删除了一点):

var answers;

$(document).ready(function() {

   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; 
        return answers;

    }); 
}

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

但是,我需要在另一个页面上使用该变量,因此我需要从$(document).ready访问它...有关如何检查变量是否已填充的任何想法?或者showResults()完成后?在此先感谢您的帮助!

  • 编辑 -

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

所以我最终在showResults();中结识了doc.ready,然后执行了许多全部“链接”在一起的功能。无论如何我可以将数据返回到变量,以便在其他地方使用吗?我希望我已经说清楚,英语不是我的母语,对不起。

5 个答案:

答案 0 :(得分:1)

在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();

    }); 
}

答案 1 :(得分:1)

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

或者查看类似情况的at this SO link

答案 2 :(得分:0)

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

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;

    }); 
}

答案 3 :(得分:0)

想法:拥有隐藏的输入字段并为其添加更改侦听器。

<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);
    }); 
}

解决方案有点像黑客,请告诉我这是否适合您

答案 4 :(得分:-1)

你的方式正确。

在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
    }); 
}