情况描述
$(document).ready(function(){
init();
getQuestion();
});
function init() {
$.ajax({
url: 'questions.xml',
cache: false,
dataType: 'xml',
success: function(data) {
$(data).find('issue').each(function(){
let tmp = {};
tmp['question'] = $(this).find('q').text();
tmp['answer'] = $(this).find('a').text();
tmp['reward'] = $(this).find('reward').text();
dataList.push(tmp);
})
}
})
}
function getQuestion() {
console.log(dataList, dataList.length);
}
原因分析
受启发后,顿悟可能是Ajax
异步操作的原因,使得在打印时,数组并没有添加完数据,截图中用红框标注的length
也在提示这一点
解决办法
1.异步变同步
$.ajax({
...
async: false, //设置为同步
...
})
2.修改逻辑
如上述代码所示,可修改为
$(document).ready(function(){
init();
//getQuestion();
});
function init() {
$.ajax({
url: 'questions.xml',
cache: false,
dataType: 'xml',
success: function(data) {
$(data).find('issue').each(function(){
let tmp = {};
tmp['question'] = $(this).find('q').text();
tmp['answer'] = $(this).find('a').text();
tmp['reward'] = $(this).find('reward').text();
dataList.push(tmp);
})
getQuestion(); // +
}
})
}
...