2017-04-21 44 views
0

我正在尝试获取moocher.io地理位置(https://market.mashape.com/moocher-io/ip-geolocation)在我的Web应用程序上工作。这个API需要一个ip输入才能返回位置等。我只是试图发送一个get请求来获取用户IP,因为我需要它自动查找它们的位置,而不必输入用户ip。获取用户IP并将其存储为变量以用于地理位置API

$.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'); 
     }' 

回答

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”键和“状态”下被列为“区域”。

https://jsfiddle.net/gco65kqy/2

祝你好运!

+0

非常感谢你,这个工作。我测试了一些不同的位置API和T帽子是地区如何成为国家,并被忽略,在我的最后马虎。 再次感谢! –

相关问题