2

我知道很好的 ​​javascript,但在 json 中完全是新手,需要执行以下操作:

从 IP 获取地理位置,使用“ipinfodb”,如下响应:

OK;;174.88.229.95;CA;CANADA;QUEBEC;MONTREAL;H1A 0A1;45.5088;-73.5878;-04:00

我发现了很多代码,但似乎都很复杂而且很长,有更多选项,比如将结果保存在 cookie 中.(我不喜欢放我不理解的代码)最好的方法是一个简单的函数,将这些信息作为字符串或数组返回,就像这样

function getLocFromIP(IP){
    (js + json code)
    return result;
}

非常感谢


谢谢大家的回复我试图过滤掉解决方案,它可以工作,但我对结果还不太满意。我要在这里重新提出我的问题:我可以用最简单的方式从 ip 检索地理位置吗(javascript)这意味着没有 json 或 jquery .. ajax 将是完美的,但它不能跨域(不同域)工作再次感谢

OK;;174.88.230.88;CA;CANADA;QUEBEC;MONTREAL;H1A 0A1;45.5088;-73.5878;-04:00
4

3 回答 3

0

IP 位置 XML API需要一些查询字符串,例如&format=json&callback=?除了 ip 地址之外的一些查询字符串,以便获取 json。

然后你得到这样的json:

{
    "statusCode": "OK",
    "statusMessage": "",
    "ipAddress": "175.108.204.0",
    "countryCode": "JP",
    "countryName": "JAPAN",
    "regionName": "TOKYO",
    "cityName": "TOKYO",
    "zipCode": "214-002",
    "latitude": "35.6149",
    "longitude": "139.581",
    "timeZone": "+09:00"
}

这是一个示例代码(感谢@iveoak 提供的良好模板):

function getLocFromIP(IP){
    //(js code to use ipinfodb API to get valid JSON response)
    var url = 'http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>&ip=' + ip + '&format=json&callback=?';
    var response = $.getJSON(url); // using jQuery

    //(js code using JSON.parse to parse the received JSON response)
    response.then(function (location) {
        var info = '<ul>';
        for (var key in location) {
            info += '<li>' + key + ': ' + location[key] + '</li>';
        }
        info += '</ul>';
    });

    //(js code to get whatever you want as the result)
    return result;
}

如果您不使用 jQuery,请参阅如何在没有 jQuery 的情况下在 JavaScript 中打开 JSON 文件?.

示例(使用 jQuery):http: //jsfiddle.net/tokkonoPapa/tevB4/

于 2013-08-25T07:03:39.127 回答
0

您发布的示例不是有效的 JSON(您可以在此处检查某些内容是否是有效的 JSON )。也就是说,看看 ipinfodb 网站,他们似乎有办法使用他们的 API 获取 JSON 输出(参见此处)。

一旦你有了有效的 JSON,你就可以使用JSON.parse。有关使用它的一些示例,请参见此处

所以总体思路是

function getLocFromIP(IP){
    //(js code to use ipinfodb API to get valid JSON reponse)
    //(js code using JSON.parse to parse the received JSON reponse)
    //(js code to get whatever you want as the result)
    return result;
}

附带说明一下,如果您使用 jQuery,您还可以使用 jQuery.parseJSON 来解析 JSON(请参阅此处),如果您预计客户端使用可能不支持 JSON.parse 的旧浏览器,这将更加可靠。

于 2013-08-25T05:07:38.503 回答
0

我发布另一个答案。

这是一个使用 jsonp 的纯 JavaScript 解决方案。基本上,使用<script src="http://api.ipinfodb.com/..."></script>.

所以你可以从任何地方访问,而不需要直接处理json。您可以简单地获取 javascript 对象。

这是我的演示:http: //jsfiddle.net/tokkonoPapa/vCTpK/

更新:

I/F 与您想要的略有不同。它使用回调函数。

getLocFromIP(ip, function(result) {
    // use result
});

演示返回:

OK;;175.108.204.0;JP;JAPAN;TOKYO;TOKYO;214-002;35.6149;139.581;+09:00

我希望这个基本的解决方案能让你满意。

于 2013-08-27T04:07:10.717 回答