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

本文介绍了在使用Ajax时遇到的一种情况:数组对象中实际有元素,但其长度却显示为0。分析原因是由于异步操作,导致在执行打印或检查时,数据尚未完全添加到数组中。解决方案包括将异步变为同步操作或者调整业务逻辑以正确处理异步数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情况描述

在这里插入图片描述

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

...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值