javascript - 没有得到数组的值,但数组存在 - 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
解决方案
您应该只在 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);
}
});
推荐阅读
- android - 没有完整的项目清理,不会应用 XML 布局更改
- r - 使用 ggplot2 (或等效)在 R 中的相同 x 轴上绘制两个数据集
- c - 无法在 C 中创建和显示链表
- kotlin - 如何在 Kotlin 中实现抽象类
- c - CP/M 获取运行程序名
- ios - Cocoapods 无法与远程 Artifactory 存储库一起使用
- android - MyFragment 开始新的意图,然后如果它关闭,它意图到 MyFragment
- swift - 使 @MainActor 类或演员符合 Codable
- c# - 无法将“System.String”类型的对象转换为“System.Byte []”类型的 ASP.NET Web 应用程序
- python - 直接使用win32库捕获ROI