在回调期间设置变量

Setting Variable During Callback

本文关键字:设置 变量 回调      更新时间:2023-09-26

以下 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。

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

.done() 需要一个回调。尝试换出

console.log(userip)

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

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

试试这个

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

试试这个

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
  }
});