我被交给一个用cakePhp框架编写的项目,需要添加一些额外的功能。我试图遵循现有的语法,但不知何故无法获得新的功能。Ajax调用cakePhp不会执行请求的控制器中的php代码
原始视图文件下面的脚本部分(HTML东西后):
<script type="text/javascript">
function printorderpage() {
window.print();
}
</script>
我想要做的是执行某些数据库操作(标记记录为锁定下来,它可以不再当用户打印页面时被编辑)。
这就是我添加到视图文件:
(function() {
var beforePrint = function() {
//console.log('Functionality to run before printing.');
//alert('before print test');
};
var afterPrint = function() {
//console.log('Functionality to run after printing');
alert('lock'+<?=$order_id?>);
$.ajax({
url: "/Workorder/ajaxLockOrder/<?=$order_id?>?debug=false",
type: "post",
dataType: "json",
data: post_data
}).done(function(e) {
alert(e.message);
});
alert('done?');
};
if (window.matchMedia) {
var mediaQueryList = window.matchMedia('print');
mediaQueryList.addListener(function(mql) {
if (mql.matches) {
beforePrint();
} else {
afterPrint();
}
});
}
window.onbeforeprint = beforePrint;
window.onafterprint = afterPrint;
}());
基本上打印后函数被调用时用户打印的页面,而这反过来又调用控制器功能“ajaxLockOrder”执行的一些数据库操作后端。通过使用警告框,我可以验证afterPrint功能是否已执行(警报弹出窗口成功显示需要锁定的$ order_id,在我的测试案例中,order_id是“18”,警示框显示为“lock18”) 。但那么ajaxLockOrder没有被调用?
控制器文件名为“workorder_controller.php”,这里的控制器内部的ajaxLockOrder功能:
function ajaxLockOrder($order_id) {
//once the order is printed, lock the order so it can not be changed
error_log("executed", 3, "lockerr.log");
$this->Order->updateActivityStream($order_id, 5); //data operation
}
通过使用的error_log功能,我可以验证此功能并没有因为日志文件执行没有被创建。另一方面,当我试图在浏览器窗口中直接输入该函数地址(http://myurl/Workorder/ajaxLockOrder/18)时,它在后端工作并生成了日志文件,并更新了订单#18的数据库记录。为什么?
在此先感谢您的帮助。
谢谢,但它没有奏效。有了这个URL,它甚至不会执行脚本 - 甚至不会出现警告框。语法错了吗? – sdssrr