更新:没有必要删除添加的脚本,因为一旦它们运行,您无法真正删除或删除它们在页面上的所有效果。
这会让很多人感到困惑,所以请坐下来,放松一下,喝点咖啡。真的很难理解这一点。
首先我要解释我在做什么。
1。)Ajax使用特定ID从php请求数据
2.)PHP使用特定ID的脚本进行响应
3.)Javascript将这些返回的脚本注入到dom中以便运行。
我需要帮助:我想确保相同的脚本不会被注入两次。所以我可以使用url并以某种方式存储该值。然后javascript可以检查脚本是否已经执行,而不是运行它。
注意:不建议使用jQuery.getscript();或类似的东西。
xhr = jQuery.ajax({ url: 'getscript.php?id=something', dateType: 'json', method: 'GET', async:false}); xhr.success(function(json){ if(json.script) { var script = document.createElement("script"); script.type = "text/javascript"; script.text = json.script; document.body.appendChild(script); // remove from the dom document.body.removeChild(document.body.lastChild); delete UnusedReferencedObjects; } });
答案 0 :(得分:2)
只需存储已执行的所有脚本ID的列表,并在每次要在成功函数中执行新脚本时对其进行检查。
答案 1 :(得分:1)
如果你在你创建的脚本块上设置了一个id,你应该只能查询dom上是否存在id。
你的ajax电话会是这样的。
var theId = "something";
xhr = jQuery.ajax({ url: 'getscript.php?id=' + theId, dateType: 'json', method: 'GET', async:false});
xhr.success(function(json){
if(json.script && $('#'+theId).length == 0) {
var script = document.createElement("script");
script.type = "text/javascript";
script.text = json.script;
script.id = theId;
document.body.appendChild(script);
// remove from the dom
document.body.removeChild(document.body.lastChild);
delete UnusedReferencedObjects;
}
});
jsfiddle上的示例。