在函数

时间:2017-04-20 14:20:17

标签: javascript jquery ajax

我需要从AJAX响应中传递数据。这是代码:

function getLocation() {
    $.get('https://ipinfo.io/json', function (data) {
        console.log(data);
        $('.test').html('<h2>Your location is: ' +  data.city + '.</h2>');  
    });
}
getLocation();

它工作正常,但我想使用data.city作为变量,我可以传递给其他api请求,以获得这个城市的温度。我正在开始js / jQuery开发,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

您处于异步上下文中,因此您不能简单地使用返回值。一种方法是通过提供相应的回调函数来链接动作。

var self = this;

function getLocation(callback) {
  $.get('https://ipinfo.io/json', function (data) {
      console.log(data);
      $('.test').html('<h2>Your location is: ' +  data.city + '.</h2>');  
      callback.call(self, data.city);
  });
}

function getTemperature(location) {
  //do another AJAX call here to get temperature and modify your DOM
}

getLocation(getTemperature);

答案 1 :(得分:0)

这是一个异步回调。因此,如果您想稍后使用它,例如进行另一次AJAX调用,那么您应该在回调中进行下一次调用:

function getLocation() {
    $.get('https://ipinfo.io/json', function (data) {
        console.log(data);
        $('.test').html('<h2>Your location is: ' +  data.city + '.</h2>');

        // Use your data here for another AJAX call
        $.get('https://example.com/test?city=' + data.city, function () {});  
    });
}
getLocation();

您可能会在稍后查找Promise以更优雅的方式处理异步代码。 https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/Promise