获取ip以及根据ip获取地理位置,经纬度等信息(增加重试机制)

var homeIndexService = {
        ajax: function (option) {
            return new Promise(function (resolve, reject) {
                option.success = function (result, text, response) {
                    //成功回调
                    resolve({
                        result: result,
                        text: text,
                        response: response
                    });
                };
                option.error = function (result, text, response) {
                    //失败回调
                    reject({
                        result: result,
                        text: text,
                        response: response
                    });
                };
                //发起请求
                $.ajax(option);
            });
        },
        getLocationAsync: function () {
            var getLocationService = {
                //当前获取ip的url索引
                currentUrlIndex: -1,
                //获取ip的url集合
                getIpUrlList: ['icanhazip.com', 'ipinfo.io/ip', 'ifconfig.me/all.xml', 'ipecho.net/plain'],
                getIp: function () {
                    //修改索引
                    getLocationService.currentUrlIndex++;
                    if (getLocationService.currentUrlIndex < getLocationService.getIpUrlList.length) {
                        homeIndexService.ajax({
                            url: 'http://' + getLocationService.getIpUrlList[getLocationService.currentUrlIndex],
                            type: 'get'
                        }).then(response => {
                            //结果
                            var result = response.result;
                            //打印
                            console.log('getIpSuccessResult', response);
                            var ip = $.type(result) == 'string'
                                ? result
                                : result.getElementsByTagName('ip_addr')[0].textContent;
                            //打印
                            console.log('getIpSuccess,currentIndex = ' + getLocationService.currentUrlIndex + ',ip = ' + ip);
                            //根据ip获取位置
                            getLocationService.getLocationByIp(ip);
                        }).catch(response => {
                            //获取ip失败,换下一个url获取
                            getLocationService.getIp();
                        });
                    } else {
                        //获取ip失败
                        getLocationService.reject(null);
                    }
                },
                getLocationByIp: function (ip) {
                    //百度地图秘钥
                    var token = '****************************************';
                    $.ajax({
                        dataType: 'JSONP',
                        crossDomain: true,
                        url: 'http://api.map.baidu.com/location/ip?ip=' + ip + '&ak=' + token,
                        type: 'get'
                    }).then(result => {
                        if (result.status == 0) {
                            //成功回调
                            getLocationService.resolve({
                                ip: ip,
                                address_full: result.address,
                                address: result.content.address,
                                detail: result.content.address_detail,
                                point: result.content.point
                            });
                        } else {
                            //获取位置失败,换下一个url获取
                            getLocationService.getIp();
                        }
                    }).catch(response => {
                        //获取位置失败,换下一个url获取
                        getLocationService.getIp();
                    });
                },
                resolve: null,
                reject: null,
                run: function () {
                    return new Promise(function (resolve, reject) {
                        //赋值
                        getLocationService.resolve = resolve;
                        getLocationService.reject = reject;
                        //打印
                        console.log('Begin Init Location');
                        //获取ip和地理位置
                        getLocationService.getIp();
                    });
                }
            };
            //返回
            return getLocationService.run();
        }
    };

 

 

测试:

//异步ip和地理位置
            homeIndexService.getLocationAsync().then(locationInfo => {
                var success = null;
                //打印
                console.log('locationInfo', locationInfo);
            }).catch(locationInfo => {
                debugger;
                var error = null;
            });

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值