在上一篇地址控件的基础上,添加了判定客户端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资料