目地:通过jQuery跨域调用,有多个网站,其中一个网站做了一个得到客户端ip所属区域的webservice,为了在其它的网站也使用该方法,并且是在静态页面中调用。所以需要这个功能。
实现: 找了很长时间,发现jquery的一个ajax方法$.getJSON 较易实现,平常也使用jQuery,所以决定用它。 原理: 通过在服务器端生成客户端脚本来实现,即用jsonp。客户端代码很容易,参照jquery中文文档就可以了。 服务器端代码使用如下 string callback=Request.QueryString["callback"]; string data="{'country':'"+new ipaddress().getMyCountry()+"'}"; string output=string.Format("{0}({1})",callback,data); Response.ContentType="application/x-javascript"; Response.Write(output); Response.End(); 这是个简单实现,实际上应该加一些判断代码及错误处理。 客户端 var country=$.cookie("country"); //console.log(country); if(country==null || country=="") { $.ajax({ dataType: 'jsonp', jsonp: 'callback', //async: false, url: 'http://192.168.2.113:81/mypos.aspx', success: function (data) { country=data.country; $.cookie("country",country,{ expires: 1, path: '/'}); if(country!='us' && country!='canada') { location.href="en-us/"; } } }); } else if(country!='us' && country!='canada') { location.href="en-us/"; } 有一点要注意,在ajax请求过程中,在它以下的代码会先执行, var country=$.cookie("country"); //console.log(country); if(country==null || country=="") { $.ajax({ dataType: 'jsonp', jsonp: 'callback', //async: false, url: 'http://192.168.2.113:81/mypos.aspx', success: function (data) { country=data.country; $.cookie("country",country,{ expires: 1, path: '/'}); } }); } if(country!='us' && country!='canada') { location.href="en-us/"; } 一开始采用这种方式,导致了所有地区的访问都会跳转到en-us/页面,因为执行ajax请求是要时间地,即使设置了不异步调用也没有用 async: false, |
jquery $.getJSON服务器端代码 asp.net
最新推荐文章于 2024-08-14 20:23:13 发布