获取用户IP并将其存储为变量以在Geolocation API中使用

问题描述 投票:0回答:1

我想在我的网络应用程序上运行moocher.io geolocation(https://market.mashape.com/moocher-io/ip-geolocation)。此API需要ip输入才能返回位置等。我只是尝试发送get请求以获取用户IP,因为我需要它来自动查找其位置,而无需输入用户ip。

$.get("http://ipinfo.io", function(response) {
alert(response.ip);
}, "jsonp");

这将返回一个IP并提醒我IP是什么。我需要做的是把那个ip插入我的地理定位函数作为变量。以下是完整的功能,现在,

$(document).ready(function () {
        var url = 'https://moocher-io-ip-geolocation-v1.p.mashape.com/' + ip;
        var ip = $.get("http://ipinfo.io", function(response) {
        alert(response.ip);
        }, "jsonp");

        $.ajax({
            url: url
            , type: 'GET'
            , dataType: 'json'
            , success: function (data) {
                console.log('SUCCESS');
                console.log(data);
                console.log(data.country);
                console.log(data.city);
                console.log(data.state);

            }
            , error: function (data) {
                console.log('ERROR');
                console.log(data);
            }
            , beforeSend: setHeaders
        });
    });
 function setHeaders(xhr) {
            xhr.setRequestHeader('X-Mashape-Key', 
 'OURjCxSqLNmshIvDitfBhE88vFV8p1WrqCRjsnr8HkCb33A83c');
            xhr.setRequestHeader('Accept', 'application/json');
        }'
javascript jquery html api
1个回答
0
投票

现在,在您从第一个请求收到IP地址之前,正在进行第二个异步请求。你只想在收到moocher.io的回复之后再等待向ipinfo.io提出请求。

幸运的是,这是一个快速解决方案。您可以在函数中包装第二个异步请求,并在第一个异步请求的回调中调用该函数:

$.get("https://ipinfo.io", function(response) {
   alert("Initial IP address request: " + response.ip);
   mooch(response.ip);
}, "jsonp");

function mooch(ip) {
    var url = 'https://moocher-io-ip-geolocation-v1.p.mashape.com/' + ip;

  $.ajax({
    url: url
    , type: 'GET'
    , dataType: 'json'
    , success: function (data) {
      console.log('SUCCESS');
      console.log(data);
      console.log(data.ip.country);
      console.log(data.ip.city);
      console.log(data.ip.region);
    }
    , error: function (data) {
      console.log('ERROR');
      console.log(data);
    }
    , beforeSend: setHeaders
  });
}

function setHeaders(xhr) {
  xhr.setRequestHeader('X-Mashape-Key', 
                       'OURjCxSqLNmshIvDitfBhE88vFV8p1WrqCRjsnr8HkCb33A83c');
  xhr.setRequestHeader('Accept', 'application/json');
}

请注意,从moocher.io返回的结果数据似乎与您的初稿略有不同(它嵌套在'ip'键下,'state'列为'region'。

https://jsfiddle.net/gco65kqy/2

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.