javascript - 在异步请求期间难以将数据推送到数组

标签 javascript jquery ajax

在下面的代码中,我想知道为什么我的 console.log(dataArray) 显示一个空数组。我认为console.log可能会在ajax请求完成拉取数据之前被调用。如果是这种情况,有什么方法可以在调用 console.log 之前等待 ajax 请求完成吗?

var dataArray = [];

var gdpAPI = "https://raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/master/GDP-data.json";
  $.getJSON( gdpAPI, {
    format: "json",
    async: false

  })
    .done(function( data ) {


    yearsData = data['data']


    $.each(yearsData, function(i){
       dataArray.push(yearsData[i]);


    })


 });

 console.log(dataArray);

提前谢谢您。 怀亚特

最佳答案

异步代码

您是对的,console.log 在请求完成之前被调用。只需将日志语句放入 .done 部分即可。

Working Fiddle

var dataArray = [];

var gdpAPI = "https://raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/master/GDP-data.json";
$.getJSON(gdpAPI, {
    format: "json",
    async: false

  })
  .done(function(data) {


    yearsData = data['data']

    $.each(yearsData, function(i) {
      dataArray.push(yearsData[i]);


    })
		console.log('length: ' + dataArray.length,dataArray);

  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

关于javascript - 在异步请求期间难以将数据推送到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40826166/

相关文章:

javascript - 如何在我的 VueJS/Vuetify 组件中打开和关闭多个 v-menus?

java - 我应该将 Struts 1 或 2 与 jQuery 一起使用吗?

jquery - 隐藏内容扭曲了 css 多列布局上的列

javascript - 将 CSRFToken 添加到 Ajax 请求

jquery - 简单的ajax和jquery ajax

javascript - 应该如何对两个 Ajax 调用的结果进行计算?

javascript - 谷歌地图不适用于 IE

javascript - 开 Jest 没有找到测试

javascript - Angular 2 : provide current route to parent component

jquery - 在不使用 .css() 的情况下从 css 文件以编程方式更改样式