在回调期间设置变量

时间:2016-01-18 22:12:15

标签: javascript jquery ajax

以下jQuery代码尝试在回调ajax GET请求期间将客户端的IP地址存储在全局变量中。

代码

  var userip = null;
  $.ajax({
    url: "http://ipinfo.io",
    type: 'get',
    dataType: 'jsonp',
    async: false,
    success: function(data) {
      userip = data.ip;
      console.log(userip); // prints unique ip address
    }
  }).done(console.log(userip)); // prints null

知道GET请求通常是异步执行的(但另有要求),我在JSON规范中标记了async: false。为了增加度量,我调用done()以确保请求已完成,然后继续。

尽管如此,打印userip在GET请求后返回null,但在ajax成功回调期间打印唯一的客户端IP。

任何解释都将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:1)

.done()需要回调。尝试交换

console.log(userip)

function() { console.log(userip); }

答案 1 :(得分:0)

您正在做的是立即执行console.log(userip),而不是在请求完成后执行。这就是userip在成功处理程序中正确存储的原因。将done视为请求完成后要执行的操作。它需要执行一个动作(函数)。您正在传递实际返回console.log(userip)的语句(undefined)。所以done没有做任何事情。

试试这个

}).done(function() {
    console.log(userip);
});

答案 2 :(得分:0)

试试这个

var userip = null;
  $.ajax({
  url: "http://ipinfo.io",
  type: 'get',
  dataType: 'jsonp',
  async: false,
  success: function (data) {
    userip = data.ip;
    console.log(userip); // prints unique ip address
  },
  complete: function () {
    console.log(userip); // prints unique ip address
  }
});
相关问题