跨域通信

今天一早在逛博客园的时候,突然看到一篇关于跨域请求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上的应用又可以继续下去了,总的来说,还是有很大收获的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值