Ajax | 数组对象中有元素 但长度为0

情况描述

Ajax | 数组对象中有元素 但长度为0_第1张图片

$(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(); // +
		}
	})
}

...

你可能感兴趣的:(Web,报错摘记)