jquery 开关中未定义的变量

qacovj5a  于 9个月前  发布在  jQuery
关注(0)|答案(2)|浏览(114)

我正在使用一个API来获取Battlefield的统计信息。级别返回一个数字,我使用一个开关来确定该级别的名称,因此无论用户名是什么,或者用户是否升级,都会使用开关进行更新。然而,当我访问“rank”变量时,它并没有出现,因为它说级别未定义,所以开关根本不起作用。

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);
});

字符串
这是控制台的图像:


的数据

vc9ivgsu

vc9ivgsu1#

有两种可能性:

  1. Ajax调用尚未完成(或未成功终止)
  2. Ajax调用返回的数据并不是您所期望的,特别是,如果level值是整数,那么case值也应该是整数:
switch (level) {
    case 0: // not '0'
        rank = 'Recruit';
        break;
    // etc

字符串

pgpifvop

pgpifvop2#

ajaxSearch是异步的,所以当你调用workoutRank时,level不能保证有值。你需要确保你理解这两件事是并行发生的。
相反,在ajax调用返回时调用workoutRank,或者使用promises来确保值将被解析。

**编辑:**这个问题被编辑,以显示这不一定是这样的,但我会离开这个,因为它肯定是一个问题,其他人在未来经历这一点

相关问题