Ajax html响应中的asp.net评估脚本

com*_*lez 1 asp.net ajax updatepanel

我正在使用“更新面板”,我的回答中包含一些类似波纹管的JavaScript。成功响应后,我需要评估,加载(使用外部脚本)

例如:我的HTML回应

<script type="text/javascript" src="test.js"></script>
<script type="text/javascript">
alert('asd');
</script>
<div>test</div>
<div>blah blah blah</div>
Run Code Online (Sandbox Code Playgroud)

Dam*_*ian 5

我不确定这个问题对您是否仍然很重要,但是我将在下面尝试提供一个合理的答案。

AJAX框架不评估通过UpdatePanel调用返回的脚本。您必须将外部脚本重新附加到文档中,以便浏览器可以请求它们并评估所有内联脚本。您可以使用下面粘贴的一个小模块。

var UpdatePanelEnhancer = function ()
{
    var divSelector = '#liveArea';
    function evaluateScripts()
    {
        $(divSelector).find('script').each(function ()
        {
            if (this.src)
            {
                $('body').append(this);
            }
            else
            {
                var content = $(this).html();
                eval(content);
            }
        });
    };

    Sys.Application.add_load(evaluateScripts);
} ();
Run Code Online (Sandbox Code Playgroud)

它的弱点是您必须为元素提供一个选择器,模块可以在其中寻找脚本进行评估(例如,“ liveArea”),尽管您可以扩展模块并为其提供某种外观。另外,我强烈建议您之前加载外部javascript。如果由于某种原因不能执行此操作,则应另外检查脚本是否已被引用,以避免不必要的调用以及潜在的意外行为和错误。