<script>标记之间的Javascript函数未在ajax调用</script>上加载

时间:2011-09-09 14:02:34

标签: javascript html ajax

作为ajax调用的一部分,我想将脚本标记之间列出的这个javascript函数添加到我的文档中。 ajax调用工作正常,但它删除了我文档的这一部分。

<script language="javascript"> 

    window.onload = function(){


            var input = document.getElementById('tid-acc');


            document.getElementById('rule-type').onchange = function() { 
               var v

al = this.value; 
           if (val == 'tid and acc') {
               input.style.display = 'inline'; 
           }
           else {
              input.style.display = 'none';
           }
        };
    }
    </script>

我做错了什么?由于我不打算进入,我需要在Ajax调用上动态执行此函数。提前谢谢。

1 个答案:

答案 0 :(得分:0)

以下是一篇很好的文章:Global eval. What are the options?

文章还比较了着名的js库如何做到:

  

图书馆的全球评估

     

那么一些流行的Javascript库会做什么?哪个全球化   他们选择了eval解决方案吗?

     

正如我们之前看到的,jQuery牺牲了更多的返回值   广泛的浏览器支持,在其中使用脚本插入技术   jQuery.globalEval方法。

     

Prototype.js甚至没有尝试全局评估脚本 - 它使用了一个   好老,直接eval调用。相反,Prototype.js警告说   在文档中对本地执行进行分支。

     

Dojo选择臭名昭着的window.eval变体,但做了些什么   真的搞砸了 - 如果eval存在于全局上,它会使用间接eval   对象(在所有符合ES3标准的浏览器中都应该如此),并且会掉线   回到常规的eval调用。显然这种退缩   导致代码在本地执行,这也应该是静默发生的。   Dojo的评估行为会因环境而异,   并且有可能发生未被捕获的错误。在一个相关的,幽默的笔记,   围绕着大卫马克的dojo.eval的评论让我感到震惊   这条消息。

     

Mootools使用window.execScript,返回脚本   插入(类似于jQuery)。然而,jQuery的脚本插入是   比Mootools更强大,因为它们实际测试它是否会产生   代码评估。

     

Fuse.js选择了一个非常精细和谨慎的策略。它测试是否   间接eval按预期工作(如果有的话捕获错误),如果使用它   它确实;如果间接评估失效,Fuse会依赖脚本   注射。与jQuery或Mootools不同,它实际上试图返回一个   通过脚本注入执行的代码的值。它是通过包装来实现的   带有eval的代码内容。执行的一个有趣的副作用   通过eval全局代码是函数和变量声明   创建可删除的绑定(这很可能是无关紧要的   细节)。

以下是Mootools 1.3.2的用法:

String.implement('stripScripts', function(exec){
    var scripts = '';
    var text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(all, code){
        scripts += code + '\n';
        return '';
    });
    if (exec === true) Browser.exec(scripts);
    else if (typeOf(exec) == 'function') exec(scripts, text);
    return text;
});

Browser.exec = function(text){
    if (!text) return text;
    if (window.execScript){
        window.execScript(text);
    } else {
        var script = document.createElement('script');
        script.setAttribute('type', 'text/javascript');
        script.text = text;
        document.head.appendChild(script);
        document.head.removeChild(script);
    }
    return text;
};

// on successful HTML request
success: function(text){
    response.html = text.stripScripts(function(script){
        response.javascript = script;
    });
}