jQuery记住脚本是否已经注入?

时间:2011-03-02 01:01:07

标签: javascript jquery plugins

更新:没有必要删除添加的脚本,因为一旦它们运行,您无法真正删除或删除它们在页面上的所有效果。

这会让很多人感到困惑,所以请坐下来,放松一下,喝点咖啡。真的很难理解这一点。

首先我要解释我在做什么。

1。)Ajax使用特定ID从php请求数据 2.)PHP使用特定ID的脚本进行响应 3.)J​​avascript将这些返回的脚本注入到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;
      }
});

2 个答案:

答案 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上的示例。