遇到过几次此类问题,上一次用了JQUERY的JSONP,而这次用了普通的JS写法,其实两者是完全一样的,贴出来分享一下也便于以后自己查找
首先是JQUERY的JSONP方法:
假设有一个静态页面上的某些功能需要通过判断IP来授权访问,而这个网站是静态的没办法自己实现判断IP功能,这时候就可以用跨域来解决代码如下:
1 |
var CheckUrl= function (){ |
这个函数功能是用户点击某个链接,调用CheckUrl()用JQUERY的getJSON方法来访问http://www.xxx.com/Urlcheck/Url/CheckUrl,callback=?是一个与后台返回地址约定好的一个函数名称,接着往后看就明白了。
监视一下这个JSONP方法执行时候访问的地址就会看到是这样的
请注意callback=jsonp1295517950805 这个参数是jquery自动添加的,在写的时候写的只是http://www.xxx.com/Urlcheck/Url/CheckUrl?callback=?,
后台接收页面:
01 |
public ActionResult CheckUrl() |
04 |
string ip=GetUserIp(); |
06 |
ReStr rstr=UrlDecide.CheckUrl(ip); |
08 |
string jsonStr = "{\"Status\": \"" + rstr.Status + "\",\"Message\": \"" + rstr.Message + "\",\"Url\": \"" + rstr.Url + "\"}" ; |
10 |
string parStr = Request.QueryString[ "callback" ].ToString(); |
12 |
JavaScriptResult javaStr = JavaScript(parStr + "(" + jsonStr + ")" ); |
要注意的一点就是返回内容的Content-Type,必须为text/javascript或者 application/javascript,这里MVC的ActionResult 比较方便的提供了JavaScript()方法,webform方式的话指定一下Response.ContentType属性也可以。
看看返回的数据
1 |
jsonp1295517950805({ "Status" : "1" , "Message" : "可以访问" , "Url" : "www.yyy.com" }) |
JavaScript方法:
上面JQUERY的方法特别简单好用,可能用了但是不知道是怎么实现的,看完以下实现就明白JSONP的实现方式了
01 |
var CheckUrl= function (){ |
03 |
var s=document.createElement( 'SCRIPT' ); |
05 |
$( "#script" ).append(s); |
10 |
var dataObj=eval( "(" +json+ ")" ); |
11 |
if (dataObj.Status==1){ |
12 |
window.open(dataObj.Url); |
14 |
alert(dataObj.Message); |
HTML代码:
1 |
< div id = "script" ></ div > |
后端代码:
01 |
public ActionResult CheckUrl() |
04 |
string ip = GetUserIp(); |
06 |
ReStr rstr = UrlDecide.CheckUrl(ip); |
08 |
string jsonStr = "{\"Status\": \"" + rstr.Status + "\",\"Message\": \"" + rstr.Message + "\",\"Url\": \"" + rstr.Url + "\"}" ; |
10 |
JavaScriptResult javaStr = JavaScript( "L(" + jsonStr + ")" ); |
看到这里应该就明白了JQUERY的JSONP方法了:)
刚开博客,发现写个简单的东西也挺费时间啊- -!