来自同步AJAX调用的控制台日志数据

时间:2016-05-20 09:36:50

标签: javascript jquery ajax

无法理解这一点。我正在尝试将来自同步ajax调用的数据存储在var和console日志中,但是,最终的控制台日志在同步调用完成之前运行,因此返回undefined

代码:

$(document).ready(function() {
  var longitude = 51.4543,
      latitude = 0.9781,
      apiKey = "",
      result;

  $.ajax({
    async: false,
    url: "https://api.forecast.io/forecast/" + apiKey + "/" + longitude + "," + latitude,
    dataType: "jsonp",
    success: function(data) {
      result = data;
      //working
      console.log(result);
    },
  });
  //not working
  console.log(result);
});

我的印象是JS会在继续之前等待同步调用完成,但我猜不是这样的情况?如果没有,我如何将get响应存储在全局var中以供其他地方使用?

2 个答案:

答案 0 :(得分:3)

您正在发出JSONP请求。 JSONP 无法同步执行。因此,async: false将被忽略。

您必须重新构建代码才能异步工作。

如果您需要返回其他函数可用于获取数据的内容,请使用promise。 $.ajax将返回一个。

global_var = $.ajax(...);
global_var.done(function (data) { console.log("Use some data", data); });
global_var.done(function (data) { console.log("Use some data again", data); });

答案 1 :(得分:1)

所以简短的回答是没有,你不能将result存储在全局变量中。无论其他功能想要使用result,都需要进入这个区块:

function(data){
...here...
}