根据浏览器访问页面获取Ip


获取IP,并存储的步骤:

1.通过浏览器的ip获取方法采用第三方的搜狐IP查询,使用方法如下:

  • 在根据情况引入js文件,一般在根目录下的index,html中进行引入(public====》index.html)

     

  • 获取数据

    

          sessionStorage.setItem('ip',returnCitySN["cip"]);

          sessionStorage.setItem('cname',returnCitySN['cname'])

    

2.在对应的页面中进行数据的拿取,和向后台进行发送进行存储,以便后续使用(先向后台请求,如果数据不存在,在请求另一个第三方的数据(电信/聚合---都是收费)的)

  因为有js的存在,一般是放在mounted()页面中进行操作:

  接收数据:let that= this ; 

  that.checkIp = sessionStorage.getItem('ip');  checkIp是需要现在data中进行声明的   先向后台进行请求,调用后台给出的接口,根据后台返回的值做判断,如果有值则不再请求第三方的数据直接进行数据展示,没有则进行数据请求,在进行数据获取展示    xxx(this.checkIp).then((res)=>{       if(res.data.enName == 'new User'){         ajax({           'url':'https://api.ip138.com/ip/',           'data':{            //默认自动添加callback参数               'ip':this.checkIp, //为空即为当前iP地址               'oid':'48260',               'mid':'108510',               'token':'9681975f8b86df4f9d47cc6d68a230ef'  //不安全,请定期刷新token,建议进行文件压缩           },           'dataType':'jsonp',           'success':function(res){               console.log(res);           }         });       }else if(res.data.enName != ''){         xxx(this.checkIp).then((res)=>{            that.form.countryName = res.data.enName;         })                 }     }) 3.当使用第三方的数据请求成功的时候,你需要让数据传给后台(避免一个id频繁,多次的调用,占用资源,恶意使用)     if(res.ret == 'ok'){                 console.log(11111);                 // console.log(this);                 that.form.countryName = res.data[0];                 // console.log(that.form.countryName,"that.form.countryName");                 // console.log("this.choseCountry",this.choseCountry);                 that.Allparams.ip = that.checkIp;                 that.Allparams.enName = that.form.countryName;                 xxx(that.Allparams).then((res)=>{                   console.log(res);                 })               } 完整的代码是:   // 获取ip,并向后台查询  (xxx是代表的数据向后台请求的函数名,注意引入接口路径)     let that = this;     that.checkIp = sessionStorage.getItem('ip');     console.log(that.checkIp+" " +that.checkCity);     xxx(this.checkIp).then((res)=>{       if(res.data.enName == 'new User'){         ajax({           'url':'https://api.ip138.com/ip/',           'data':{            //默认自动添加callback参数               'ip':this.checkIp, //为空即为当前iP地址               'oid':'48260',               'mid':'108510',               'token':'9681975f8b86df4f9d47cc6d68a230ef'  //不安全,请定期刷新token,建议进行文件压缩           },           'dataType':'jsonp',           'success':function(res){               console.log(res);               if(res.ret == 'ok'){                 console.log(11111);                 // console.log(this);                 that.form.countryName = res.data[0];                 // console.log(that.form.countryName,"that.form.countryName");                 // console.log("this.choseCountry",this.choseCountry);                 that.Allparams.ip = that.checkIp;                 that.Allparams.enName = that.form.countryName;                 xxx(that.Allparams).then((res)=>{                   console.log(res);                 })               }           }         });       }else if(res.data.enName != ''){         xxx(this.checkIp).then((res)=>{            that.form.countryName = res.data.enName;         })                 }     }) 使用第三的数据的时候还需要使用第三的js,js如下:(根据自己情况引入,一般存放在piblic ====>index.html中)   function ajax(params){     params = params||{};     if (!params.url) {         throw new Error('Necessary parameters are missing.'); //必要参数未填     }     var random = +new Date;     var hander = null;     var options = {         url: '',                                //接口地址         type: 'GET',                            //请求方式         timeout: 5000,                          //超时等待时间         cache: true,                            //缓存          async: true,                            //是否异步         xhrFields: {},                          //设置XHR对象属性键值对。如果需要,可设置withCredentials为true的跨域请求。         dataType: 'json',                       //请求的数据类型         data: {},                               //参数         jsonp: 'callback',                      //传递请求完成后的函数名         jsonpCallback: 'jsonp_' + random,       //请求完成后的函数名         error: function() {},                   //请求失败后调用         success: function(){},                  //请求成功后调用         complete: function(){}                  //请求完成后调用     };     var formatParams = function(json) {         var arr = [];         for(var i in json) {             arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(json[i]));         }         return arr.join("&");     };     for(var i in params){         switch(i){             case 'type':                 options[i] = params[i].toUpperCase();                 break;             case 'dataType':                 options[i] = params[i].toLowerCase();                 break;             default:                 options[i] = params[i];         }     }     if(typeof options.data =='object'){         options.data = formatParams(options.data);     }     if(options.dataType=='jsonp'){         options.cache = params.cache||false;         //插入动态脚本及回调函数         var $head = document.getElementsByTagName('head')[0];         var $script = document.createElement('script');         $head.appendChild($script);         window[options.jsonpCallback] = function (json) {             $head.removeChild($script);             window[options.jsonpCallback] = null;             hander && clearTimeout(hander);             options.success(json);             options.complete();         };         //发送请求         if(options.cache){             options.data += options.data?'&_'+random:'_'+random;         }         options.data += '&'+options.jsonp+'='+options.jsonpCallback;         $script.src = (options.url + '?' + options.data).replace('?&','?');         //超时处理         hander = setTimeout(function(){             $head.removeChild($script);             window[options.jsonpCallback] = null;             options.error();             options.complete();         }, options.timeout);     }else{         if(options.cache){             options.data += options.data?'&_'+random:'_'+random;         }         //创建xhr对象         var xhr = new (self.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP");         if(!xhr){             return false;         }         //发送请求         if (options.type == 'POST') {             xhr.open(options.type, options.url, options.async);             xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');         }else{             options.url += options.url.indexOf('?')>-1?'&'+options.data:'?'+options.data;             xhr.open(options.type, options.url, options.async);             options.data = null;         }         if(options.xhrFields){             for(var field in options.xhrFields){                 xhr[field]= options.xhrFields[field];             }         }         xhr.send(options.data);         //超时处理         var requestDone = false;         hander = setTimeout(function() {             requestDone = true;             if(xhr.readyState != 4){                 xhr.abort();                 options.error();             }             options.complete();         }, options.timeout);         //状态处理         xhr.onreadystatechange = function(){             if(xhr.readyState == 4&&!requestDone) {                 if(xhr.status>=200 && xhr.status<300||xhr.status == 304) {                     var data = options.dataType == "xml" ? xhr.responseXML : xhr.responseText;                     if (options.dataType == "json") {                         try{                             data =  JSON.parse(data);                         }catch(e){                             data = eval('(' + data + ')');                         }                     }                     options.success(data);                 } else {                     options.error();                 }                 hander && clearTimeout(hander);                 options.complete();             }         };     } }    

 

 

相关