我需要以某种方式检索客户端的IP地址使用JavaScript;没有服务器端代码,甚至没有SSI。
然而,我并不反对使用免费的第三方脚本/服务。
我需要以某种方式检索客户端的IP地址使用JavaScript;没有服务器端代码,甚至没有SSI。
然而,我并不反对使用免费的第三方脚本/服务。
当前回答
试试这个
$.get("http://ipinfo.io", function(response) {
alert(response.ip);
}, "jsonp");
OR
$(document).ready(function () {
$.getJSON("http://jsonip.com/?callback=?", function (data) {
console.log(data);
alert(data.ip);
});
});
小提琴
其他回答
你可以用ajax调用hostip.info或类似的服务…
function myIP() {
if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("GET","http://api.hostip.info/get_html.php",false);
xmlhttp.send();
hostipInfo = xmlhttp.responseText.split("\n");
for (i=0; hostipInfo.length >= i; i++) {
ipAddress = hostipInfo[i].split(":");
if ( ipAddress[0] == "IP" ) return ipAddress[1];
}
return false;
}
作为奖励,地理定位信息将在同一调用中返回。
使用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>
好吧,我偏离了这个问题,但我今天有一个类似的需求,尽管我无法使用Javascript从客户端找到ID,但我做了以下工作。
服务器端:-
<div style="display:none;visibility:hidden" id="uip"><%= Request.UserHostAddress %></div>
使用Javascript
var ip = $get("uip").innerHTML;
我使用ASP。Net Ajax,但您可以使用getElementById而不是$get()。
发生的事情是,我在页面上有一个隐藏的div元素,用户的IP从服务器呈现。而在Javascript中,我只是加载这个值。
这可能对像你这样有类似需求的人(比如我,但我还没有弄清楚)有帮助。
干杯!
我将提供一个方法,当我想在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;
}
...是更好的方法。