现在的位置: 首页 > 综合 > 正文

使用动态的script标签的方式实现JS的跨域请求

2016年12月03日 ⁄ 综合 ⁄ 共 1041字 ⁄ 字号 评论关闭

ajax由于安全性方面的原因不提供跨域请求数据的方法,所以我们可以使用动态的script标签的方式实现JS的跨域请求。

首先,需要满足的条件是:

1、自身对JS代码可操作,也就是可以动态的添加JS代码或者script标签

2、第三方需要跨域的服务器支持返回JSON格式的数据,并且支持回调函数。

这种方法的原理是:

Web页面上凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>

页面引用JS文件,实际上返回的是一大段可执行的JS代码,浏览器在接收到了这些代码的时候会做相应的解析。

我们同样也可以利用这一点来满足我们跨域请求数据的需求。

首先在客户端注册一个回调函数, 然后把回调函数的名字传给服务器。此时,服务器先生成 json 数据。然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 回调函数名.  

最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。 

客户端浏览器,解析script标签,并执行返回的javascript文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里。(动态执行回调函数)

示例:

使用Yahoo!的Geocoding Web service,将一个邮编94107转化成一个经/纬对

首先在前端页面添加一个script标签:jsr_class.js

//定义回调函数

function getGeo(jsonData) {    
    alert('Latitude = ' + jsonData.ResultSet.Result[0].Latitude +
          ' Longitude = ' + jsonData.ResultSet.Result[0].Longitude);
    bObj.removeScriptTag();//请求数据处理完毕,移除刚刚构建动态脚本标签

}

//创建URL(含参数)

var req ='http://api.local.yahoo.com/MapsService/V1/geocodeappid=YahooDemo&output=json&callback=getGeo&location=94107';

//创建一个新的Request对象

bObj = new JSONscriptRequest(req);

//构建动态脚本标签

bObj.buildScriptTag();

//添加脚本标签到页面中

bObj.addScriptTag();

抱歉!评论已关闭.