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

当ajax无法进行跨域请求时,可以借助动态创建的script标签来实现。该方法要求服务器支持JSON数据和回调函数。原理是利用script标签的跨域特性,服务器根据客户端传递的回调函数名生成一个JavaScript函数,将JSON数据作为参数,客户端接收到后执行回调函数,从而实现数据交互。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值