我正在使用CakePHP 2.3.8并尝试使用JavaScript AJAX请求在没有jQuery的情况下使用内容填充div。 请求中的文本加载,但不会触发该加载文件中的JavaScript。我在该页面上添加了另一个JavaScript文件,但它也没有加载(在Chrome中检查网络选项卡)。为什么会这样?我没有收到任何错误。
On Tests / testpage我向另一个文件发出POST请求,然后填充“content_container”div。 HTML加载,但没有JavaScript。
//tests/testspage.ctp
<div id = "content_container"></div>
<script>
//remember, I'm doing this because I want to try it without jQuery
(function loadXMLDoc() {
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("content_container").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","/tests/testpage_content",true);
xmlhttp.send();
})();
</script>
邮件请求正常工作,并填充div“content_container”。但是,该页面上的JavaScript都不会被触发。 文件“another_js_file.js”无法加载(我检查了网络标签)。我可以直接浏览它,所以我知道我有正确的路径,没有错误显示。
以下是testpage_content.ctp
上的内容//tests/testpage_content.ctp
<p>Your div now has content</p>
<script>
window.onload = function() {
alert("Content is loaded!");
}
</script>
<script src="/js/another_js_file.js"></script>
总而言之,我打开了/tests/testpage.ctp,它向/tests/testpage_content.ctp发出了一个AJAX POST请求。我填充的div显示文本,但我的JavaScript没有被触发,我在该页面上包含的另一个脚本没有加载。 是什么导致警报消息无法显示而“another_js_file.js”无法加载?
我检查了Chrome开发人员标签中的加载顺序,并显示
testpage
testpage_content
//another_js_file.js should appear here, but it does not
在我的TestsController中我只有
public function testpage(){
}
public function testpage_content(){
$this->layout = 'ajax';
}
答案 0 :(得分:1)
导入js文件或css文件的方式不正确
请勿为您的观点执行此操作
<script src="/js/another_js_file.js"></script>
试试蛋糕2.X
echo $this->Html->script('another_js_file.js');
答案 1 :(得分:0)
正如我在评论中提到的那样,它不应该加载脚本,这不是蛋糕的错,而是浏览器的工作方式。无论您使用AJAX插入DOM,都不会触发脚本。如果您需要坚持使用该功能,则需要通过JS自己解析并调用结果中的脚本。
使用jQuery,您可以使用不同的方法执行AJAX请求,有些只是将内容放在DOM或其他允许您稍后调用函数的内容中,并使用返回的数据执行更多的工作。