在上一篇地址控件的基础上,添加了判定客户端IP所在省市的功能。
调用新浪提供的IP库接口:http://counter.sina.com.cn/ip/,(可直接点击链接查看返回的数据)
126提供的接口备用:http://ip.ws.126.net/ipquery
在线演示:http://sandbox.runjs.cn/show/sgrk3ceu
核心代码(setClientAddress.js):
//根据客户端IP判定其所在省市 //expr:用于筛选元素的jQuery表达式 var setClientLocation = function(expr){ //调用新浪接口 //返回样例数据:var ILData = new Array("61.175.198.120","中国", "浙江省", "杭州市", "电信"); if (typeof(ILData_callback) != "undefined") { ILData_callback(); } $.ajax({ type:"get", cache: true, async: false,//这里的设置为同步没起作用 url:"http://counter.sina.com.cn/ip/", async:false, dataType: 'script',//设置服务器返回的数据类型 scriptCharset: 'gb2312',//防止乱码 success: function(){ if(ILData[2]) { //可以做个是否为表单元素的判定,选择使用val()还是text(),还未实现 $(expr).val($.trim(ILData[2])+'-'+ $.trim(ILData[3])); } } }); //如果新浪接口失效,使用126接口 //接口返回数据:var lo="浙江省", lc="杭州市"; var localAddress={city:"杭州市", province:"浙江省"} if(!$(expr).val()) { $.ajax({ type:"get", cache: true, async: false, url:"http://ip.ws.126.net/ipquery", async:false, dataType: 'script', scriptCharset: 'utf-8', success: function(){ if(lo) $(expr).val($.trim(lo)+'-'+$.trim(lc)); } }); } };
调用:
//调用setClientAddress.js中封装的方法 //参数为jQuery表达式,如#id, .class之类 setClientLocation('#consignoraddress');
1.分享下资料
2.尝试使用jsonp来实现,还存在一些问题,优先完成项目就直接使用上面的方式实现。jsonp资料