0

我在使用 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;

    }); 
}

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

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

  • 编辑 -

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

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

4

5 回答 5

1

answers在 AJAX 调用之后执行依赖于数组的功能。从内部调用您的函数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();

    }); 
}
于 2013-04-16T11:05:35.830 回答
1

您可以使用whenjQuery 提供的方法(查看此 SO 链接)。

或查看此 SO 链接,其中解释了类似情况。

于 2013-04-16T11:05:53.360 回答
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;

    }); 
}
于 2013-04-16T11:04:05.683 回答
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);
    }); 
}

解决方案有点像黑客,让我知道这是否适合你

于 2016-09-25T07:52:55.557 回答
-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
    }); 
}
于 2013-04-16T11:07:45.003 回答