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();