跨域通信

前端之家收集整理的这篇文章主要介绍了跨域通信前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

猜你在找的Json相关文章