Jquery(12)Jquery Ajax跨域访问
同源策略
一、跨域的集中方法:
- 服务器端发送请求,服务器作为中继代理(此方法不理解)
- iframe
- script标签
通过动过动态生成script标签,并将src指向目标源的方式
原生实现方式示例:
var url="www.xxx.baidu.com/aa.js", scriptTag=document.createElement("script"); scriptTag.src=url; document.getElementByTagName("head")[0].appendChild(scriptTag); function showSth(data){ alert(data.a); } ////////////aa.js var aa={"a":"A"}; showSth(aa);
二、jsonp:
1、客户端
使用script标签实现跨域访问、可在url中指定回调函数、获取json数据并在指定的回调函数中执行
jQuery实现jsonp
//$.getJSON var url="wwwa.xxx.baidu.com/aa.js?callback=?"//使用?作为回调函数名,jquey会自动生成随机名替换?号。 $.getJSON(url,function(jsoon){ alert(json.name+json.Email); }); //$.ajax; var url=www.xxx.baidu.com/aa.asmx?code=xx $.ajax({ url: url, dataType: jsonp, jsonp:”callback”,//传递给请求处理程序的参数名,用来获取jsonp回调函数名(默认为“callback”,自动在URL中加上callback=?参数) jsonpCallback:”GetUser”,//自定义的jsonp回调函数名(默认为jquery自动生成的随机函数名),此参数通常不用设置 success:function(json){ alert(json.name+json.Email); } });
jQuery 只支持get方式的jsonp实现。
jsonp的缺点:如果返回的数据格式有问题或返回失败了,并不会报错。
2、服务端
string jsoncallback = context.Request["callback"]; //如果不指定jsoncallback参数名,则返回随机函数名。 string jsonp=jsoncallback+"("+ new JavaScriptSerializer(new {Name="a",Email="B"})+")" context.Response.ContentType = "text/plain"; context.Response.Write(jsonp);
posted on 2018-08-12 00:31 springsnow 阅读(1448) 评论(0) 编辑 收藏 举报