○やりたいこと
controller のアクションで
formのPOST値(コントロール名は仮にkeywordと称する)を受け取り、その値を条件にして
クエリを実行。実行結果をformと同じ画面に表示
○環境
Server MAMP apache,php7,MySQL
cakePHP3.3
○現状
■controller action内
public function search() { if($this->request->is('ajax')) { $this->autoRender = false; // (1) $keyword 取得 // (2) $keywordでクエリ実行 // $this->find を使用 conditionに(1)を渡す // (3) (2)の実行結果が一件以上あれば (もしくはクエリが失敗していない場合) $success = true; // (4) (2),(3)の結果を配列にセット $res = array( 'result' => (2)の結果, 'success' => $success ); return json_encode(compact('res')); }
■view form内 method=post POSTバックしている
// myformはformのid
$this->Form->input('keyword'); $this->Form->button(__('Submit'),array('id'=>'to_submit'));
■view <script>タグ内
<script type="text/javascript"> $(document).ready(function(){ $('#testsubmit').click(function(e){ e.preventDefault(); var keyword = $('#keyword').val(); $.ajax({ type: 'post', url: '/(dir_name)/(controller_name)/search', dataType : 'json', data: { word: keyword} , success: function(response){ alert('success'); // (A) }, error: function(){ alert('error'); // (B) msg = errorHandler(arguments); alert(msg); } }); }); }); $('#myform').submit(function(){ return false; }); function errorHandler(args){ // エラー内容判定 return message; }
○エラーなど
現状は、submitボタンクリックイベントで(B)のダイアログが表示されます。
○補足
controller内で
public $components = array('RequestHandler'); を記述
jquery.min.jsは、<head>内で記述
解決策をご存知の方がおられましたら、お願いいたします。
不足内容があればご指摘ください。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー