Jsonp跨域请求服务端之动态替换页面数据

4 篇文章 0 订阅

html页面代码

<a id='downloadAndroid' class="button-text " href="http://tqy.res.***.com/freeapk/tqy.apk" target="_bank"><img src="http://www.tqy.com/images/android_08ced5b.png"/> Android 下载</a>
<script>
   function queryAppVersion(obj){
       if(obj.code==200){
           document.getElementById('downloadAndroid').setAttribute('href',obj.url);
       }else{
           console.log(obj.message);
       }
   }
   window.onload = function(e){
       var script = document.createElement('script');
       script.src = 'https://tqy.***.com/v3/app_version/get?callback=queryAppVersion';
       script.onerror = function(e){
           console.log(e.responseText);
       };
       document.body.insertBefore(script,document.body.firstChild);
   }
</script>

原理

1、利用script标签可以跨域访问 2script标签中定义了一个queryAppVersion方法,window.onload使得页面  一加载的时候就执行该函数,在html中增加了“<script src="https://tqy.***.com/v3/app_version/get?callback=queryAppVersion"></script>”,其中src请求服务端的Controller 3、以上请求返回的结果是queryAppVersion({"code":200,"releaseNote":"","url":"http://tqy.res.***.com/apk/tqy-release-v3.2.4-c25-160707_signed.apk","versionName":"3.2.4.c1607070934u"}); 4、由于     在 script标签中已经定义了queryAppVersion方法,冰球返回的结果存放在script里面,相当于执行了window.queryAppVersion方法,其中传入的参数就是{"code":200,"releaseNote":"","url":"http://tqy.res.***.com/apk/tqy-release-v3.2.4-c25-160707_signed.apk","versionName":"3.2.4.c1607070934u"} 5、服务端所要做的事就是,将json返回数据包装下,变成queryAppVersion();这种格式,这样才会变成调用方法的格式

服务端代码

@RequestMapping(value = {"/v{version}/app_version/get", "/v3.2/app_versions.jsonp"}, produces = {"text/javascript; charset=UTF-8"})
   @ResponseBody
   public String getLatest(@RequestParam(value = "version_code", required = false, defaultValue = "") String code,
                           @RequestParam(value = "callback", required = false, defaultValue = "queryAppVersion") String callback) {
       AppVersionVo vo = new AppVersionVo();
       callback += "(%s);"; 
       vo.setCode(200);
       vo.setUrl(DEFAULT_URL);
       return String.format(callback, JSON.toJSONString(vo));

}

效果
这样,原先的标签就变成了

<a id="downloadAndroid" class="button-text " href="http://tqy.res.***.com/apk/tqy-tqyrelease-v3.2.4-c25-160707_signed.apk" target="_bank"><img src="http://www.tqy.com/images/android_08ced5b.png">Android 下载</a>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值