首页 > 解决方案 > 没有得到数组的值,但数组存在 - JS

问题描述

我创建了一个 ajax 调用,我将 ajax 成功数据保存在一个数组中,我在 ajax 之外调用该数据,当我做console我的数组时,它返回数组,这是屏幕截图这是我的代码:
在此处输入图像描述

function getData(){
   let surahArray = [];
   // created empty variable
   $.ajax({
       url: 'http://mp3quran.net/api/_english.php',
      type: 'get',
   success: function(data){
              let urlServer = data.reciters[112].Server;
              let resUrl;
              for(resUrl=1; resUrl <= 114; resUrl++){
                 resUrl = resUrl < 10 ? '00' + resUrl : '' + resUrl;
                 resUrl = (resUrl < 100 && resUrl > 9) ? '0' + resUrl : '' + resUrl;
                 surahArray.push(urlServer + '/' + resUrl + '.mp3');
             // pushing array data to that empty array
             }
           },
    error: function(err){
                console.log(err);
           }
   });
   let surahs = surahArray;
   // working
   console.log(surahs);
   // not working 
   console.log(surahs[0]); 
}
   
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button onclick="getData()">Get Data</button>

如果我这样做console.log(surahs),它会返回我的数组列表,但是当我这样做时,console.log(surahs[0])它会返回我undefined。 请帮助我,我错在哪里?console

标签: javascriptjqueryarraysajaxarraylist

解决方案


您应该只在 HTTP 请求完成后使用您的变量(surahs)。

您遇到的情况是 console.log 在浏览器控制台中展开数组时再次读取您的数组(以下是有关此的更多详细信息:console.log() 在值实际更改之前显示变量的更改值

    function useMyData(data) {
      console.log(data);
    }

    $.ajax({
        url: 'http://mp3quran.net/api/_english.php',
        type: 'get',
        success: function(data){

            let urlServer = data.reciters[112].Server;

            let resUrl;
            for(resUrl=1; resUrl <= 114; resUrl++){
                resUrl = resUrl < 10 ? '00' + resUrl : '' + resUrl;
                resUrl = (resUrl < 100 && resUrl > 9) ? '0' + resUrl : '' + resUrl;

                surahArray.push(urlServer + '/' + resUrl + '.mp3');
                // pushing array data to that empty array

            }
            // use it here
            useMyData(surahArray);
        },
        error: function(err){
            console.log(err);

        }
    });

推荐阅读