使用Javascript将IP映射到位置

SOF*_*ser 37 javascript ip jquery

<script type="application/javascript">
    function getip(json){
      alert(json.ip); // alerts the ip address
    }
</script>

<script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"></script>
Run Code Online (Sandbox Code Playgroud)

我可以通过此代码获取用户IP ...

我想找到这个IP的位置.我怎么能够?

小智 44

您可以将您收到的IP提交给在线地理定位服务,例如http://www.geoplugin.net/json.gp?ip=<your ip here>&jsoncallback=<suitable javascript function in your source>,然后包括它返回的源,该源将运行您在jsoncallback地理定位信息中指定的功能.

或者,您可能希望查看HTML5的地理定位功能 - 您可以在此处查看其演示.这样做的好处是您不需要向外部服务器发出请求,但它可能不适用于不支持HTML5的浏览器.

  • 这是一个很好的链接http://www.geoplugin.com/quickstart#how_to_geo-localize_your_visitors (3认同)
  • 如何在我的 javascript 中调用这个 api 而不会遇到 cors 问题? (2认同)
  • 同样现在(2021 年),此服务需要付费订阅才能使用“https”而不是“http”。在“https”托管站点内的 API 中使用“http”将被浏览器阻止。 (2认同)

Ale*_*rto 26

可在此处获取在MaxMind数据库上运行的免费开源社区运行geolocation ip服务:https://ipstack.com/

https://api.ipstack.com/160.39.144.19
Run Code Online (Sandbox Code Playgroud)

局限性

每月10,000次查询

  • 虽然freegeoip.net使用MaxMind数据库,但该服务与公司完全没有关系.它是一个开源和免费软件,由社区支持并由我自己维护,未经MaxMind同意. (4认同)
  • 它已被移至https://ipstack.com,他们现在提供付费服务.但是,免费许可证的10,000个查询限制应该足够了.请注意,它不是每小时一次,而是每个月. (2认同)
  • 他们不支持通过 https 进行 api 调用免费计划 (2认同)

Cho*_*ang 9

我想指出,如果您使用http://freegeoip.net/,则无需向其提供客户端位置的IP地址.试试这些:

1)http://freegeoip.net/xml/

2)http://freegeoip.net/json/

3)http://freegeoip.net/csv/

但是,我无法通过AJAX调用检索信息,可能是因为某些跨源策略.显然他们不允许公众访问他们的系统.

  • 这已经被关闭了。 (3认同)

小智 8

使用将IP地址映射到位置的API非常简单.运行代码段以在输入框中获取IP的城市和国家/地区.

$('.send').on('click', function(){

  $.getJSON('https://ipapi.co/'+$('.ip').val()+'/json', function(data){
      $('.city').text(data.city);
      $('.country').text(data.country);
  });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input class="ip" value="8.8.8.8">
<button class="send">Go</button>
<br><br>
<span class="city"></span>, 
<span class="country"></span>
Run Code Online (Sandbox Code Playgroud)


tal*_*ony 6

为了防止您无法完成上述代码,以下是使用jquery的简单方法:

$.getJSON("http://www.geoplugin.net/json.gp?jsoncallback=?",
    function (data) {
        for (var i in data) {
            document.write('data["i"] = ' + i + '<br/>');
        }
    }
);
Run Code Online (Sandbox Code Playgroud)


Cla*_*diu 6

更好的方法是跳过“中间人”(ip)

jQuery.get("http://ipinfo.io", function(response) {
    console.log(response.city);
}, "jsonp");
Run Code Online (Sandbox Code Playgroud)

这给你IP城市国家