动态创建script实现跨域请求数据

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

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

页面引用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();

推荐阅读更多精彩内容