开关中未定义的变量

问题描述 投票:0回答:2

我正在使用 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);
});

这是控制台的图像:

Console

javascript jquery ajax
2个回答
0
投票

有两种可能:

  1. Ajax 调用尚未完成(或未成功终止)
  2. Ajax 调用返回的数据不是您所期望的。特别是,如果您的

    level
    值是整数,那么您的 case 值也应该是整数:

    switch (level) {
        case 0: // not '0'
            rank = 'Recruit';
            break;
        // etc
    

0
投票

ajaxSearch
是异步的,因此当您调用
level
时,不保证
workoutRank
有值。您需要确保您了解这两件事是并行发生的。

相反,请在

workoutRank
调用返回时调用
ajax
,或使用
promises
确保该值能够解析。

编辑:问题经过编辑以表明情况不一定如此,但我将保留这一点,因为这对于将来遇到这种情况的其他人来说肯定是一个问题

© www.soinside.com 2019 - 2024. All rights reserved.