推迟返回$ .getJSON并将async设置为false

时间:2018-02-09 10:33:43

标签: javascript jquery json ajax

我尝试过在其他问题中看到的各种解决方案,但未成功记录data.ip

当我记录foo时,我只返回undefined。为什么ip未将async属性设置为false

TY



$.ajaxSetup({
  async: false
});

var getIp = function() {
  var ip;
  $.getJSON('//freegeoip.net/json/?callback=?', function(data) {
    ip = data.ip;
  });
  return ip;
}

var foo = getIp();
console.log(foo);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

您没有正确实施AJAX。我更改了您的功能,以便返回Promise(请注意函数中的return个关键字)。在.then()内,你可以传递一个回调函数,该函数将在Ajax完成后执行。$.getJSON()Ajaxhttp://api.jquery.com/jquery.ajax/)的实现

注意:

我强烈建议您不要在async: false内使用xhr / Ajax,因为它会降低您网站的速度。更好地使用下面的代码:

var getIp = function() {
  var ip;
  return $.getJSON('//freegeoip.net/json/?callback=?', function(data) {
    return data.ip;
  });
}

getIp().then(function(res) {
  console.log(res);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>