Js根据Ip地址自动判断是哪个城市

JavaScript023

Js根据Ip地址自动判断是哪个城市,第1张

如果只是写浏览器端js的话,需要一个庞大的js问价的ip数据库

// 数据库

var database = {

'123.123.123.123': {

province: '北京市',

city: '北京市',

operators: '联通',

},

'123.123.123.124': {

province: '北京市',

city: '北京市',

operators: '联通',

}

// ...

}

// 主函数

var inquireIP = function (ip) {

if(database[ip]) {

return database[ip]

}else{

console.log('找不到ip:' + ip)

return null

}

}

// 调用

var ipData = inquireIP('123.123.123.123')

这样子这个js文件会很大,也可以调用API的形式,为方便下面js代码使用了jquery

// 主函数

var inquireIP = function (ip, callback) {

$.ajax({

url: '你的API接口地址',

type: 'GET',

dataType: 'jsonp',

data: {ip: ip}

})

.done(function(data) {

callback(data)

})

}

// 调用

inquireIP('123.123.123.123', function (data) {

console.log(data)

})

这样子就可以在服务端处理,当然提前你得有服务器,并搭建一个查询ip的API接口

不建议使用js进行这个处理,你这样做的话完整过程为

1. 用户访问php页面

2. 服务端输出html

3. 浏览器运行js检查ip所属区域

4. ajax方式提交区域信息给服务器

5. 服务器返回查询结果

6. js将查询结果显示到当前页面

你想想这要多长时间。因此最好是php端直接判断区域,然后直接查询并输出就行了。

提供一个php写的函数,如果有用望采纳

function getCityByUserIp() {

    $ip = false

    if (isset($_SERVER)){

        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){

            $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]

        } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {

            $ip = $_SERVER["HTTP_CLIENT_IP"]

        } else {

            $ip = $_SERVER["REMOTE_ADDR"]

        }

    } else {

        if (getenv("HTTP_X_FORWARDED_FOR")){

            $ip = getenv("HTTP_X_FORWARDED_FOR")

        } else if (getenv("HTTP_CLIENT_IP")) {

            $ip = getenv("HTTP_CLIENT_IP")

        } else {

            $ip = getenv("REMOTE_ADDR")

        }

    }

    if (false === $ip) {

        return false

    }

    $file = fopen('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' . $ip, 'r')

    $content = fread($file, 1024)

    fclose($file)

    if (! preg_match("/^var remote_ip_info = (\\{[^\\}]+\\})$/", $content, $_match)) {

        return false

    }

    $ipInfo = json_decode($_match[1])

    return $ipInfo

}

返回的数组中包括 country, province, city等,如果返回false表示无法获得ip或该ip没有在大陆地区匹配的记录(港澳台似乎有province,但是没有city)。

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>js判断客户端ip地址跳转</title>

<meta name="keywords" content="" />

<meta name="description" content="" />

<script src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"></script>

</head>

<body>

<script>

if(remote_ip_info.province != "广东"){

location.href="http://a.com"

}else{

location.href="http://b.com"

}

</script>

</body>

</html>

【摘自百度经验】