1

我正在使用 PHP、MySQL、AJAX、Javascript、HTML5、css3 开发一个网站......我想要做的是加载一个外部 html 文件并让嵌入的 Javascript 执行。

我正在尝试使用的 ajax 负载是这个

<pre><code>


    $(document).ready(function(){

        $(".meny a").click(function(){
            page=$(this).attr("href");
            $.ajax({
                url: "includes/"+page,
                cache:false,
                success:function(html){
                    afficher(html);
                },

                error:function(XMLHttpRequest,textStatus,errorThrown){
                    alert(testStatus);
                }
            })

            return false;
        });
    });

    function afficher(data){
        $("#main").fadeOut(500,function(){
        $("#main").empty(); 
        $("#main").append(data);
        $("#main").fadeIn(1000);
        })
        }


</code></pre>

当页面的内容直接加载时,javascript(或jQuery)函数工作正常,但是当在AJAX加载的另一个页面的内容中找到的div标签时,javascript(或jQuery)在这个div上不起作用,而jquery脚本是已经存储在“head”标签中。

我认为问题在于 AJAX,因为当我直接调用包含 Javascript 的页面时它工作正常。

4

3 回答 3

2

@kieran 不,我从不尝试这个技巧!我想我找出了真正的问题!

jQuery 实际上删除了它在 ajax 调用中遇到的任何 javascript。他们这样做是为了防止 IE 出现问题。这是 jQuery 1.8.3 的实际代码片段(第 7479-7481 行):

// inject the contents of the document in,removing the scripts 
// to avoid any 'Permission Denied' errors in IE 
.append( responseText.replace( rscript, "" ) ) 

在第 7291 行中,它定义了 rscript 正则表达式:rscript = /(?:(?!</script>)<[^<])*</script>/gi,你说得对,我必须添加一个回调加载ajax函数!

于 2013-01-16T19:14:17.827 回答
0

默认情况下,您通过 AJAX 检索的页面中包含的 javascript 将不会被执行,因为它被视为纯文本。

您需要将文本评估为 javascript。javascript 中有一个内置函数可以实现这一点,称为eval. 这是一篇关于使用evalAJAX 的好文章,感谢technify.me

但是我必须注意,使用eval被认为是一种不好的做法。有一句众所周知的说法“eval is evil”,因为它的性能很差,并且可能存在 XSS 漏洞。所以你可能想看看如何在不直接使用 AJAX 调用(可能是动态构建的script标签)的情况下实现类似的效果。eval但是,如果响应纯粹是 javascript,则出于您的目的将起作用。$.get否则,您将需要以某种方式从您返回的 HTML 中提取 javascript 。

于 2013-01-14T06:34:18.727 回答
-2

利用

 $(".meny a").on( 'click', ...

代替

 $(".meny a").click( ....

现在$(".meny a")就可以点击

于 2013-01-14T06:20:57.160 回答