2017-07-03 3 views
-1

cakePhpフレームワークで書かれたプロジェクトを手渡し、追加機能を追加する必要がありました。私は既存の構文に従おうとしましたが、何らかの形で新しい機能を働かせることができませんでした。cakePhpでAjaxを呼び出すと、コントローラで要求されたPHPコードが実行されない

元のビューファイル(HTMLのものの後に)次のスクリプト部分を持っています

<script type="text/javascript"> 

function printorderpage() { 
    window.print(); 
} 

</script> 
私がやりたいこと

は、特定のデータベース操作を実行することでロックダウンとして(それはもはやでき、レコードをマークしていませんユーザーがページを印刷するときに編集されます)。ここで

は、私は、ビューファイルに追加するものです:基本的にafterPrint機能は、ユーザーがページを印刷したときに呼び出され

(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が "18"、警告ボックスに "lock18"と表示されていた$ order_idが正常に表示されました) 。しかし、その後、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> 
関連する問題