使用JQuery获取用户的IP地址,但稍后将其用作变量

时间:2014-07-23 14:18:54

标签: jquery ajax ip-address

我的目标是使用jQuery或Javascript 获取用户的IP地址而不使用使用其他库或类似的东西,将其存储为变量,然后再使用该变量。我看了看,但我只找到像getjson或ajax这样的解决方案,这些解决方案在函数内部有变量 - 在其他地方无法使用。

这是我能够独立完成的最好的事情,并不比其他任何解决方案好得多:

$.ajax({
  type: "POST",  
  url: "datascripts/ip.php",
  data: {get:"ip"},
  dataType: "json",
  context: document.body,
  async: true,
  success: function(res, stato) {
    var ip = res.ip;
  },
  error: function(res, stato) {
    alert("IP thing didn't work.");
  }
});
alert(ip);

但是,这并没有做任何事情,因为变量是在ajax函数内部设置的,并且似乎不存在于它之外。

如果我将成功功能更改为:

  success: function(res, stato) {
    alert(res.ip);
  }

然后这很好用 - 我得到了正确的IP。

我想这可以通过简单地使ip变量成为一个全局变量来修复,但是它还没有工作 - 不知道为什么。

我尝试了一些不同的方法来使IP变量成为全局:

  • 在ajax之前声明变量(var ip; / var ip ="&#34 ;;)
  • 使用窗口对象使其全局化,仅在ajax内部或之前(window.ip = res.ip;)

1 个答案:

答案 0 :(得分:3)

注意,只有在ajax成功返回后,才会填充ip变量。你之前不能使用它,所以也许你可以进行回调

var ip;
$.ajax({
  type: "POST",  
  url: "datascripts/ip.php",
  data: {get:"ip"},
  dataType: "json",
  context: document.body,
  async: true,
  success: function(res, stato) {
    ip = res.ip;
    myCallback();
  },
  error: function(res, stato) {
    alert("IP thing didn't work.");
  }
});

function myCallback(){
    // Do whatever you want with ip here.
    console.log(ip);
}