目前框架cakePHP扎实用了1年多,这里说下本人常用的ajax 套路,自己当做一个模板。
目录 {
}
1 前端视图
echo $this->Form->create(false, array( 'url' => array( 'controller' => '表单控制器', 'action' => '表单action' ), 'type' => 'post', 'id'=>'表单id'));echo $this->Form->input('field1') ;echo $this->Form->input('field2') ;echo $this->Form->input('field3') ;echo $this->Form->input('field4') ;echo $this->Form->end("发送");
2. 前端js
$("#表单id").submit(function(){ // 获取当前表单里的数据 var data = $(this).serialize(); // 获取表单的提交地址 var action = $(this).attr("action"); $.ajax({ data: data, url: action, type: "post", cache: false, dataType: "json", beforeSend: function(){ // 通信开始前,弹出loading图标等操作 }, success: function (response) { // console.log(response); if (response.processResult === true) { console.log("操作成功"); // 返回过来的数据 console.log(response.returnData); } }, error: function (e) { console.log(e.status); if (e.status === 403) { console.log("被拒绝访问"); } else if (e.status >= 500) { console.log("系统出错了"); } else if (e.status === 404) { console.log("找不到地址"); } }, complete: function () { // 当通信完成后,删除loading图标 等操作 } }); // 阻止表单默认的提交行为 return false;});
3. 后台PHP
public function ajaxAction() { $this->log(__METHOD__ . "()开始", "info"); // =========================== 0 设置类型 =============================== // 取消自动渲染 $this->autoRender = FALSE; // 判断是不是ajax访问 if (!$this->request->is('ajax')) { // throw new BadRequestException (); } // 修改文档类型为json $this->response->type('json'); // =========================== 1 参数准备=============================== // 获取请求数据 $data = $his->request->data; // 获取需要处理的数据 $data['field1'] = $data['field1']; $data['field2'] = $data['field2']; $data['field3'] = $data['field3']; $data['field4'] = $data['field4']; // =========================== 2 执行业务操作=========================== // 保存数据 $queryResult = $this->模型->save($data); // =========================== 3 返回数据(ajax)=========================== // 判断处理结果 if ($queryResult) { $returnData = [ 'processResult'=>true, 'message'=>"处理成功", 'returnData'=> $returnData ]; $this->log(__METHOD__ . "()结束", "info"); return json_encode($result); } else { $returnData = [ 'processResult'=>false, 'message'=>"出什么错了" ]; $this->log(__METHOD__ . "()非正常结束", "info"); return json_encode($returnData); } }