我需要以某种方式检索客户端的IP地址使用JavaScript;没有服务器端代码,甚至没有SSI。
然而,我并不反对使用免费的第三方脚本/服务。
我需要以某种方式检索客户端的IP地址使用JavaScript;没有服务器端代码,甚至没有SSI。
然而,我并不反对使用免费的第三方脚本/服务。
当前回答
有一种更简单和免费的方法,不需要访问者的任何许可。
它包括向http://freegeoip.net/json提交一个非常简单的Ajax POST请求。一旦收到JSON格式的位置信息,您就可以通过更新页面或重定向到新页面来做出相应的反应。
以下是提交位置信息请求的方法:
jQuery.ajax( {
url: '//freegeoip.net/json/',
type: 'POST',
dataType: 'jsonp',
success: function(location) {
console.log(location)
}
} );
其他回答
如果你总是包含一个文件,你可以做一个简单的ajax get:
function ip_callback() {
$.get("ajax.getIp.php",function(data){ return data; }
}
ajax。getip。php是这样的
<?=$_SERVER['REMOTE_ADDR']?>
我会说乍得和马耳他有很好的答案。然而,他们的想法很复杂。所以我建议这个代码,我发现从广告国家插件
<script>
<script language="javascript" src="http://j.maxmind.com/app/geoip.js"></script>
<script language="javascript">
mmjsCountryCode = geoip_country_code();
mmjsCountryName = geoip_country_name();
</script>
没有ajax。只是简单的javascript。: D
如果你访问http://j.maxmind.com/app/geoip.js,你会看到它包含
function geoip_country_code() { return 'ID'; }
function geoip_country_name() { return 'Indonesia'; }
function geoip_city() { return 'Jakarta'; }
function geoip_region() { return '04'; }
function geoip_region_name() { return 'Jakarta Raya'; }
function geoip_latitude() { return '-6.1744'; }
function geoip_longitude() { return '106.8294'; }
function geoip_postal_code() { return ''; }
function geoip_area_code() { return ''; }
function geoip_metro_code() { return ''; }
它还没有真正回答这个问题,因为
http://j.maxmind.com/app/geoip.js不包含IP(尽管我打赌它使用IP来获取国家)。
但是编写这样的PhP脚本非常容易
function visitorsIP() { return '123.123.123.123'; }
让。打开http://yourdomain.com/yourip.php。
然后做
<script language="javascript" src="http://yourdomain.com/yourip.php"></script>
问题中特别提到不能使用第三方脚本。别无他法。Javascript无法知道你的IP。但是其他可以通过javascript访问的服务器也可以毫无问题地工作。
有一种更简单和免费的方法,不需要访问者的任何许可。
它包括向http://freegeoip.net/json提交一个非常简单的Ajax POST请求。一旦收到JSON格式的位置信息,您就可以通过更新页面或重定向到新页面来做出相应的反应。
以下是提交位置信息请求的方法:
jQuery.ajax( {
url: '//freegeoip.net/json/',
type: 'POST',
dataType: 'jsonp',
success: function(location) {
console.log(location)
}
} );
我将提供一个方法,当我想在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;
}
...是更好的方法。
用jQuery获取你的IP
你可以用一行JS得到你的公共IP地址?有一个免费的服务为你提供这个,你需要做的就是一个get请求:
$.get('http://jsonip.com/', function(r){ console.log(r.ip); });
要使上面的代码片段正常工作,浏览器必须支持CORS(跨源请求共享)。否则 将引发安全异常。在旧的浏览器中,你可以使用这个版本,它使用JSON-P请求:
$.getJSON('http://jsonip.com/?callback=?', function(r){ console.log(r.ip); });