我正在使用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的页面时,它工作正常。
答案 0 :(得分: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 = /(?:(?!&lt; / script&gt;)&lt; [^&lt;])*&lt; / script&gt; / gi, 你是对的我必须在加载ajax中添加一个回调函数!
答案 1 :(得分:0)
默认情况下,AJAX检索的页面中包含的javascript将不会被执行,因为它被视为纯文本。
您需要将文本评估为javascript。 javascript中有一个内置函数可以实现这个名为eval
的功能。以下是关于使用eval
和AJAX的好文章,感谢technify.me。
但是我必须注意,使用eval
被认为是一种不好的做法。有一个众所周知的说法"eval is evil"因为它的性能很差,并且可能存在漏洞。因此,您可能希望了解如何在不直接使用AJAX调用的情况下实现类似的影响(可能是动态构建的script
标记)。但是,出于您的目的,如果响应纯粹是javascript,则eval
将起作用。否则,您需要以某种方式从您$.get
返回的HTML中提取javascript。
答案 2 :(得分:-2)
使用
$(".meny a").on( 'click', ...
而不是
$(".meny a").click( ....
$(".meny a")
现在可以点击