CakePHP-使用JavaScript生成AJAX请求

CakePHP-使用JavaScript生成AJAX请求,javascript,html,ajax,cakephp,xmlhttprequest,Javascript,Html,Ajax,Cakephp,Xmlhttprequest,我正在使用CakePHP2.3.8,并尝试使用JavaScript AJAX请求(无需jQuery)将内容填充到div中加载请求中的文本,但不会触发加载文件中的JavaScript。我在该页面上包含了另一个JavaScript文件,但它也没有加载(在Chrome中选中网络选项卡)。为什么会发生这种情况?我没有收到任何错误 在Tests/testpage上,我向另一个文件发出POST请求,然后该文件填充“content\u container”div。加载HTML,但JavaScript没有加载

我正在使用CakePHP2.3.8,并尝试使用JavaScript AJAX请求(无需jQuery)将内容填充到div中加载请求中的文本,但不会触发加载文件中的JavaScript。我在该页面上包含了另一个JavaScript文件,但它也没有加载(在Chrome中选中网络选项卡)。为什么会发生这种情况?我没有收到任何错误

在Tests/testpage上,我向另一个文件发出POST请求,然后该文件填充“content\u 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>
在我的TestsController中,我只有

public function testpage(){



}


public function testpage_content(){

    $this->layout = 'ajax';

}

正如我在评论中提到的,它不应该加载脚本,这不是cake的错,而是浏览器的工作方式。使用AJAX插入DOM的任何内容都不会触发脚本。如果需要坚持使用该功能,您需要自己通过JS解析并调用结果中的脚本


有了jQuery,您可以使用不同的方法执行AJAX请求,有些方法只是将内容放在DOM中,有些方法允许您稍后调用函数,并对返回的数据执行更多操作。

导入js文件或css文件的方式不正确

不要为了你的观点而这样做

<script src="/js/another_js_file.js"></script>

这是不应该的,这不是蛋糕的错,而是浏览器的工作方式。使用AJAX插入DOM的任何内容都不会触发脚本。如果您需要坚持使用JS功能,您需要自己解析并调用结果中的脚本。@user221931您应该继续并回答这个问题。我附带的额外脚本呢?为什么不装呢?我使用jQueryPost对其进行了测试,只是为了查看,然后加载了该脚本。你能告诉我一些关于解析脚本的事情吗?好吧,jQuery以某种方式加载放置在从AJAX请求检索到的文件中的外部文件,这就是我想要做的(在上面的示例中加载另一个_js_file.js)。我应该具体搜索什么来了解这一点?我翻遍了jQuery代码,但由于我不了解它的基本原理,所以我在浏览时遇到了困难。我希望您不要尝试查看缩小版:)jQuery经过了大量优化,包含了很多技巧,使代码更小但更难理解。哈哈,不,我没有。我打开了未压缩的版本。它仍然是巨大的,有很多物体在运行,所以我很难弄清楚什么是引用什么。因此,基本上,如果我想在通过POST请求检索到的文件中加载另一个_js_file.js,我需要查找哪些关键字或主题?只需将代码放入相应的回调函数即可。在这种情况下,您希望在AJAX请求成功后执行一些操作,因此
done()
是最佳选择。这与脚本标记有什么不同吗?是的。这有助于并与htaccess相关,以授予您的导入文件权限,这还包括导入文件的正确路径。
public function testpage(){



}


public function testpage_content(){

    $this->layout = 'ajax';

}
<script src="/js/another_js_file.js"></script>
echo $this->Html->script('another_js_file.js');