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;

    }); 
}

私の質問は次のとおりです。関数にログインanswersすると、素敵な配列が得られます。これは、変数が満たされdoneていることを意味します。arrayしかし、からログに記録すると$(document).ready、空の変数が返されます。これはおそらく、AJAX 呼び出しが非同期であり、変数がいっぱいになる前にログが実行されるためです。

ただし、別のページでその変数を使用する必要があるため、次からアクセスする必要があります$(document).ready...変数が入力されているかどうかを確認する方法について何か考えはありますか? それともshowResults()完成時?よろしくお願いします。

  • 編集 -

返信ありがとうございます。しかし、私はまだ次のことに苦労しています: 私が理解しているように、ajax コールバックから別の関数を呼び出して、それにデータを渡すことができます。問題は、呼び出し後にさまざまなことを行う必要があり、現在機能させる唯一の方法は、ajax コールバックで関数を呼び出し、その関数から別の関数を呼び出すことです。 ..

そのため、すべてが「リンク」された多くの関数を実行する で機知showResults();に富むことになります。doc.ready他の場所で使用するために、データを変数に返すことができる方法はありますか? 英語は私の母国語ではありません。申し訳ありません。

4

5 に答える 5

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 に答える
-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 に答える