我交给了一个用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的数据库记录。为什么?
提前感谢您的帮助。
答案 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>