cakePhp中的Ajax调用不会在控制器中执行请求的php代码

时间:2017-07-03 10:20:34

标签: ajax cakephp

我交给了一个用cakePhp框架编写的项目,需要添加一些额外的功能。我试图遵循现有的语法,但不知何故无法使新功能起作用。

原始视图文件具有以下脚本部分(在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;
}());

基本上,只要用户打印页面,就会调用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的数据库记录。为什么?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

import json
from jsoncomment import JsonComment

with open(filename) as data_file:    
    parser = JsonComment(json)
    data = parser.load(data_file)

答案 1 :(得分:0)

我知道它一定很简单。原来这个特定的视图页面没有加载jquery库(可能因为它之前不需要任何ajax调用)。我添加了jquery库,一切正常!

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>