2017-07-03 32 views
-1

我被交给一个用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的数据库记录。为什么?

在此先感谢您的帮助。

回答

0
$.ajax({ 
     url: "<?php echo $this->Html->url(array('controller'=>'Workorder','action'=>'ajaxLockOrder',$order_id));?>", 
     type: "post", 
     dataType: "json", 
     data: post_data 
    }).done(function(e) { 
     alert(e.message); 
    }); 
+0

谢谢,但它没有奏效。有了这个URL,它甚至不会执行脚本 - 甚至不会出现警告框。语法错了吗? – sdssrr

0

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

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