CakePHP - 使用JavaScript发出AJAX请求

时间:2014-02-01 22:41:10

标签: javascript html ajax cakephp xmlhttprequest

我正在使用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';

}

2 个答案:

答案 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或其​​他允许您稍后调用函数的内容中,并使用返回的数据执行更多的工作。