【问题标题】:Console log data from synchronous AJAX call来自同步 AJAX 调用的控制台日志数据
【发布时间】:2016-05-20 17:49:25
【问题描述】:

无法完全理解这一点。我正在尝试将来自同步 ajax 调用的数据存储在 var 和控制台日志中,但是,最终控制台日志在同步调用完成之前运行,因此返回 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 在继续之前会等待同步调用完成,但我猜不是这样?如果没有,我如何将获取响应存储在全局变量中以供其他地方使用?

【问题讨论】:

  • 同步ajax调用已被弃用,使用成功回调做所有逻辑
  • -@OP,你什么都知道...问题是什么?
  • @TomBarton,使用callback 怎么样?

标签: javascript jquery ajax


【解决方案1】:

您正在发出 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); });

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多