我从后端PHP脚本中检索它们作为二维JSON数组后,我的变量范围出现问题。这是我的代码:
var qns, qis, ncs, nzs, tps;
function get_questions() {
var url = "php/pytania.php";
$.ajax({
cache: false,
type: "GET",
dataType: "text",
url: url,
success: function(response) {
data = jQuery.parseJSON(response);
qns = data.qns;
qis = data.qis;
ncs = data.ncs;
nzs = data.nzs;
tps = data.tps;
}
});
}
$(document).ready(function() {
var index = 0;
get_questions();
$("#question_no").text(qns[index]);
});
当我尝试最后引用我的qns数组时,它会显示一个变量undefined error。然而它在ajax语句中有效 - 没有问题......
谢谢并保重! :)
彼得。
答案 0 :(得分:18)
问题是成功方法是异步调用的 - 意味着在调用$()。ajax并尝试引用变量之后,尚未分配它,因为尚未执行成功回调方法。 / p>
这可以通过将async选项设置为false来解决,如下所示:
$.ajax(
{
/* this option */
async: false,
cache: false,
type: "GET",
dataType: "text",
url: url,
...
这意味着在获得响应之前,ajax调用之后不会执行任何其他操作。替代方法是将代码放置在成功回调方法本身所需的数组中。
答案 1 :(得分:4)
您的问题是您在数据到达之前尝试使用这些数据。
您可以添加在数据来自服务器后调用的回调函数:
var qns, qis, ncs, nzs, tps;
function get_questions(callback) {
var url = "php/pytania.php";
$.ajax({
cache: false,
type: "GET",
dataType: "text",
url: url,
success: function(response) {
data = jQuery.parseJSON(response);
qns = data.qns;
qis = data.qis;
ncs = data.ncs;
nzs = data.nzs;
tps = data.tps;
callback();
}
} );
}
$(document).ready(function() {
var index = 0;
get_questions(function(){
$("#question_no").text(qns[index]);
});
});
注意:您可以使用dataType: "json"
,然后自动解析响应,您不必使用parseJSON
。
答案 2 :(得分:0)
你应该为你的ajax请求添加一个回调函数,并尝试“$(”#items_no“)。text(qns [index]);”在回调函数中。您尝试在ajax请求实际加载之前访问该变量。