我需要以某种方式检索客户端的IP地址使用JavaScript;没有服务器端代码,甚至没有SSI。
然而,我并不反对使用免费的第三方脚本/服务。
我需要以某种方式检索客户端的IP地址使用JavaScript;没有服务器端代码,甚至没有SSI。
然而,我并不反对使用免费的第三方脚本/服务。
当前回答
如果你在某个地方使用NGINX,你可以添加这个片段并通过任何AJAX工具询问你自己的服务器。
location /get_ip {
default_type text/plain;
return 200 $remote_addr;
}
其他回答
使用Smart-IP.net Geo-IP API。例如,使用jQuery:
$(document).ready( function() {
$.getJSON( "http://smart-ip.net/geoip-json?callback=?",
function(data){
alert( data.host);
}
);
});
Javascript / jQuery获取客户端的IP地址和位置(国家,城市)
你只需要嵌入一个带有“src”链接的标签到服务器。服务器将以Object / JSON的形式返回“codehelper_ip”,您可以立即使用它。
// First, embed this script in your head or at bottom of the page.
<script language="Javascript" src="http://www.codehelper.io/api/ips/?js"></script>
// You can use it
<script language="Javascript">
alert(codehelper_ip.IP);
alert(codehelper_ip.Country);
</script>
更多信息在Javascript检测真实IP地址加国家
如果你正在使用jQUery,你可以尝试:
console.log(codehelper_ip);
它将显示关于返回对象的更多信息。
如果你想要回调函数,请试试这个:
// First, embed this script in your head or at bottom of the page.
<script language="Javascript" src="http://www.codehelper.io/api/ips/?callback=yourcallback"></script>
// You can use it
<script language="Javascript">
function yourcallback(json) {
alert(json.IP);
}
</script>
我非常喜欢api.ipify.org,因为它同时支持HTTP和HTTPS。
下面是一些使用jQuery获取IP的例子。
基于HTTPS的JSON格式
https://api.ipify.org?format=json
$.getJSON(“https://api.ipify.org/?format=json”, function(e) { 警报(e.ip); }); <script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js”></script>
基于HTTP的JSON格式
http://api.ipify.org?format=json
$.getJSON(“http://api.ipify.org/?format=json”, function(e) { 警报(e.ip); }); <script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js”></script>
基于HTTPS的文本格式
如果你不想要JSON格式,也有一个通过HTTPS的明文响应
https://api.ipify.org
基于HTTP的文本格式
在HTTP上也有明文响应
http://api.ipify.org
我将提供一个方法,当我想在html页面中存储信息时,我经常使用这个方法,并且希望我的javascript能够读取信息,而不需要实际地将参数传递给javascript。当您的脚本被外部引用而不是内联引用时,这尤其有用。
然而,它不符合“没有服务器端脚本”的标准。但是如果你可以在你的html中包含服务器端脚本,可以这样做:
将隐藏标签元素设置在html页面的底部,就在结束主体标签的上方。
你的标签看起来是这样的:
<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>
一定要创建一个名为hiddenlabel的类,并设置visibility:hidden,这样就没有人真正看到这个标签。你可以用这种方式在隐藏标签中存储很多东西。
现在,在你的javascript中,检索存储在标签中的信息(在这种情况下是客户端的ip地址),你可以这样做:
var ip = document.getElementById("ip").innerHTML;
现在你的变量“ip”等于ip地址。现在可以将ip传递给API请求了。
*编辑2年后* 两个小的改进:
我经常使用这种方法,但是调用标签class="data",因为实际上,这是一种存储数据的方法。类名“hiddenlabel”是一个愚蠢的名字。
第二个修改是在样式表中,而不是visibility:hidden:
.data{
display:none;
}
...是更好的方法。
你不能。你得问服务员。