Ну
Я получил такую же потребность из-за вызовов 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)
Таким образом, у вас будет только один элемент скрипта
параметрический идентификатор
<script id="myScriptId1369838562792" type="text/javascript"
src="http://server/notify.js?callback=dummy&ts=1369838562792"></script>