我在使用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
,然后执行了许多全部“链接”在一起的功能。无论如何我可以将数据返回到变量,以便在其他地方使用吗?我希望我已经说清楚,英语不是我的母语,对不起。
答案 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
});
}