我正在使用 API 来获取《战地》的统计数据。该级别返回一个数字,我使用一个开关来确定该级别的名称,因此无论用户名是什么或用户排名如何,都将使用该开关进行更新。但是,当我访问“等级”变量时,它不会出现,因为它表示级别未定义,因此开关根本不起作用。
var rank;
var level;
$(document).ready(function() {
ajaxSearch();
});
function ajaxSearch() {
$.ajax({
url: '/api/',
dataType: 'json',
type: 'get',
cache: 'false',
success: function(data) {
$(data.result).each(function(index, value) {
level = value.rank.number;
console.log(level);
});
}
})
}
function workoutRank() {
switch (level) {
case '0':
rank = 'Recruit';
break;
case '1':
rank = 'Private';
break;
case '2':
rank = 'Private II';
break;
case '3':
rank = 'Private III';
break;
case '4':
rank = 'Private IV';
break;
case '19':
rank = 'Corporal X';
break;
}
}
$('#lookup-btn').click(function() {
workoutRank();
console.log(rank);
});
这是控制台的图像:
有两种可能:
Ajax 调用返回的数据不是您所期望的。特别是,如果您的
level
值是整数,那么您的 case 值也应该是整数:
switch (level) {
case 0: // not '0'
rank = 'Recruit';
break;
// etc
ajaxSearch
是异步的,因此当您调用 level
时,不保证 workoutRank
有值。您需要确保您了解这两件事是并行发生的。
相反,请在
workoutRank
调用返回时调用 ajax
,或使用 promises
确保该值能够解析。
编辑:问题经过编辑以表明情况不一定如此,但我将保留这一点,因为这对于将来遇到这种情况的其他人来说肯定是一个问题