jQuery加载.aspx页面但不执行内部脚本

时间:2013-06-21 08:11:37

标签: javascript asp.net jquery

我正在尝试使用像这样的jquery加载.aspx页面;

        $('ul#menu li ul.collapse').on('click', 'li a', function (e) {
            e.preventDefault();
            var div = $('#content .container-fluid .row-fluid .span12');

            var url = $(this).attr('href');
            setTimeout(function () {
                var htmlPage = div.load(url + ' #MainContentHolder',
                    function () {
                         //other stuff
                    });
            }, 1000);

        });

但是,我的.aspx页面确实嵌入了这样的javascript;

<div id="MainContentHolder">
    <h1>Test Aspx Content</h1>
    <div>
        <script type="text/javascript">
            alert("hello");
        </script>
    </div>
</div

当我看到结果HTML时,我可以看到它被加载(使用firebug)。但它没有显示alert()消息 我还在stackoverflow上阅读了所有其他问题,但这对我没有帮助;

更新:

正如asnwer中所建议的,以下代码仅适用于首次使用。我试图关闭cache:false并尝试从GETPOST;

 $.ajax({
         url:url,
         success:function(data){
         div.html(data);
    }
}); 

2 个答案:

答案 0 :(得分:1)

  

var htmlPage = div.load(url +'#MainContentHolder',                       function(){                            //其他的东西                       });

根据.load()的documentation

  

如果使用附加到URL的选择器表达式调用.load(),   但是,在更新DOM之前,脚本会被删除,   因而没有被执行。

相反,您可能希望将您的脚本放在js文件中并使用$.getScript(),它将使用GET HTTP请求从服务器加载JavaScript文件,然后执行它。

修改

替代方法是在您的页面中只有脚本并加载该页面,如下面的链接

所示

jQuery .load() call doesn't execute javascript in loaded html file

OR

如前所述,使用$ .ajax()并成功回调函数,您需要显式执行您的JS代码,如this post所示。使用eval。

OR

您可以使用.load加载动态页面,并且成功回调函数使用前面已经建议的$ .getScript。

我希望它有所帮助!

答案 1 :(得分:1)

$('ul#menu li ul.collapse').on('click', 'li a', function (e) {
            e.preventDefault();
            var div = $('#content .container-fluid .row-fluid .span12');

            var url = $(this).attr('href');
            setTimeout(function () {
                $.ajax({
                        url:url,
                        success:function(data){
                                    div.html(data);
                                    //other stuff
                                }
                        });  

            }, 1000);

        });