簡體   English   中英

Javascript | 開關中未定義的變量

[英]Javascript | Undefined Variable in switch

因此,我使用API​​是為了獲取來自《戰地風雲》的統計數據。 該級別返回一個數字,我正在使用開關來確定該級別的名稱,因此無論用戶名是什么,或者用戶是否排名靠前,都將使用該開關進行更新。 但是,當我訪問“ 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);
});

這是控制台的圖像。 安慰

ajaxSearch是異步的,因此當您調用workoutRank時,不能保證level值。 您需要確保您了解這兩件事是並行發生的。

相反,當ajax調用返回時,請調用workoutRank ,或使用promises來確保該值能夠解析。

編輯:對問題進行了編輯以表明不一定是這種情況,但我將保留此內容,因為將來肯定會有其他人遇到這個問題

有兩種可能性:

  1. Ajax調用尚未完成(或未成功終止)
  2. Ajax調用返回的數據不是您所期望的。 特別是,如果您的level值是整數,那么您的case值也應該是整數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM