您的位置:首页 > 其它

跨域通信

2013-03-22 14:01 65 查看
今天一早在逛博客园的时候,突然看到一篇关于跨域请求HTTP的文章,进去看了一下,又翻了以前自己遇到的类似的问题,查了一些资料,看了一整个上午,虽然没完完全全的弄懂,但还是小有收获,接下来会继续深入探究。

跨域通信而不受同源策略,其实大家对同源策略应该都很了解的,为了安全起见这也是必须存在的,但当我们需要引入外部资源的时候,这便成为了很大的一道阻碍,不过终究还是办法解决的,好像大家普遍地推崇JSONP的方法,简单而且不受任何限制,在看了几种方法之后,个人也觉得JSONP是最容易理解的一种方法。

首先先简单地用文字介绍一下Ajax,Asynchronous JavaScript and XML (Ajax) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术。Ajax 允许在不干扰 Web 应用程序的显示和行为的情况下在后台进行数据检索。使用
XMLHttpRequest
函数获取数据,它是一种
API,允许客户端 JavaScript 通过 HTTP 连接到远程服务器。Ajax 也是许多 mashup 的驱动力,它可将来自多个地方的内容集成为单一 Web 应用程序。

使用基于<script>的Ajax传输协议时, 服务器响应采用JSON编码的数据格式, 当执行脚本时候,
JavaScript解析器能够自动将其解码. 由于它使用JSON数据格式, 因此这种Ajax传输协议也叫做"JSONP". 所以使用jsonp技术, 只需要设置<script>的src属性, 并且插入到document中, 然后浏览器就会发送一个http请求以下载src属性所执行的url

其实就是在web页面动态插入脚本元素,其实自己不是做web出身的,所以有些东西也只是半懂半不懂的,最近在弄一个win8应用,是用HTML5和WinJS做的,所以,一些基本的web的东西还是看得懂的,只是在运用方面有些困难。

好了,回归正题,说到跨域,之前有在弄Nokia地图的东西,想着如何将Nokia地图导入到win8应用里面,把api里给的HTML代码复制进去以后发现,跨域了,没法下载外部资源,Nokia地图官方又没有win8的SDK,想着是没什么可能导进去的吧,又过了几天,在win8应用商店上发现了一个神级地图应用,什么地图都有,个人觉得厉害的是它连Open
Street Map都有,而且也有Nokia,才知道原来自己真的是菜鸟。今早又重新试了一下,哦,忘了贴一下一位大牛的代码,关于JSONP的

//根据指定的url发送一个json请求
//然后把解析得到的响应数据传递给回调函数
//在url中添加一个名为jsonp的查询参数, 用于指定该请求的回调函数的名称
function getJSONP(url, callback){
//为本次请求创建一个唯一的回调函数名称
var cbnum = "cb"+getJSONP.counter++;
var cbname = "getJSONP."+cbnum;    //作为jsonp函数的属性

//将回调函数名称以表单编码的形式添加到url查询部分中
if(url.indexOf("?") === -1){
url += "?jsonp="+cbname;
}else{
url += "&jsonp="+cbname;
}

//创建<script>用于发送请求
var script = document.createElement("script");
//定义被脚本执行的回调函数
getJSONP[cbnum] = function(response){
try{
callback(response);    //处理响应
}
finally{
//删除该函数, 并移除相应script元素
delete getJSONP[cbnum];
script.parentNode.removeChild(script);
}
}
//立即触发http请求
script.src = url;
document.body.appendChild(script);
}
getJSONP.counter = 0;
自己修改了一下之后,将原本要调用外部资源的URL放到里面,发现可以了,跨域问题解决了,但又出现了另一个问题,这是自己以后要继续探究的东西

所以,还是失败了,但是,又给我发现了另一个新东西,原来Nokia maps api中的mobile HTML5
api是可以用在win8上的,哎,看了这么久才知道,都怪自己以前不细心,老吊死在一棵树上,这样一来,自己的Nokia maps在win8上的应用又可以继续下去了,总的来说,还是有很大收获的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: