关于 jsonp 的错误

2016-08-24  本文已影响0人  HeyDelilah

背景:
使用原生 javascript ,写 jsonp 的可跨域请求逻辑,不间断发送心跳。

大失误:
由于心跳包是每秒发送一个 jsonp ,结果导致了头部插入了数不清的 script 标签。

需要做的:

  1. 清除标签
  2. 涉及的相应内存占用也要清除掉 ( 如何判断哪些是需要删除的?)

方案一:
设置唯一 id,以保证每次仅有一个 script 标签;
新增 timestamp , 以更新 url ;
结果:没用, 似乎必须要 “新增标签”,<script> 标签的 src 属性才会发起对起url的远程请求

需要做的:

  1. 了解浏览器解析标签的本质,<script> 标签中的 src 属性是如何加载资源的?
  2. 看看 jquery 是怎么处理 jsonp 的?
  3. 若这个 jsonp 请求返回的是 404 怎么办?

方案二:
每次都新增标签,但在 onload 时候,清除标签,代码如下:

var script = document.createElement('script');
var url = 'xxx';
script.setAttribute('src', url);
document.head.appendChild(script);
script.onload = function(ev){
var target = ev.target;
target.parentNode.removeChild(target);
}

上一篇 下一篇

猜你喜欢

热点阅读