好吧,
我也有同样的需求,因为事件触发了 ajax 调用。一些最早的调用可能会稍后返回,然后覆盖由最后一次调用填充的文档。
removeChild(scriptEl)
不起作用。更改src
属性也不起作用。
如果jsonp
是您唯一的出路,并且如果您可以控制服务器响应,则可以让那些附加的以区分返回的回调。
只需传递一个timestamp
参数,然后在回调中检查它
//callback
function dummy(res, ts) {
if(YAHOO.util.Selector.query('script[id='scriptIdPrefix+ts+']').length>0) {
do your job
} else {
do nothing
}
}
//add script
var scriptIdPrefix='myScriptId';
function ajaxCall() {
var timestamp = new Date().getTime();
var scriptId = scriptIdPrefix+timestamp;
//remove the previous script el
s=YAHOO.util.Selector.query('script[id^='+scriptIdPrefix+']');
if(s.length>0) {
document.body.removeChild(s[0]);
}
var script = document.createElement('SCRIPT');
script.id = scriptId;
script.type = 'text/javascript';
script.src = 'http://server/notify.js&callback=dummy&ts='+timestamp;
document.body.appendChild(script);
}
相应地组装服务器的结果notify.js
:
dummy([{"datax":"x","datay":"y"}], 1369838562792)
这样,您将只有一个像这样带有参数 id 的脚本元素
<script id="myScriptId1369838562792" type="text/javascript"
src="http://server/notify.js?callback=dummy&ts=1369838562792"></script>