CakePHP – 如何将字符串(如JSON)从控制器操作返回到Ajax请求

所以我让我的JavaScript对/my_controller/ajax_action进行Ajax调用,但是在控制器中我不知道如何将某些内容输出回JavaScript。

我收到错误,因为没有MyController::ajaxAction()视图,但显然没有视图,所以我该怎么办?

这样做,让你想要在数组中输出你的变量让我们说$data ,然后使用$this->set('data', $data);将该数组传递给视图$this->set('data', $data); 方法,然后创建一个视图/General/SerializeJson.ctp 。 在该视图文件中,输入 之后你可以使用$this->render('/General/SerializeJson'); 它应该输出json。

一般代码……

/Controllers/MyController.php

 public class MyController extends AppController { public function ajaxAction() { $data = Array( "name" => "Saad Imran", "age" => 19 ); $this->set('data', $data); $this->render('/General/SerializeJson/'); } } 

/Views/General/SerializeJson.ctp

  

我找到的最简单的方法是禁用自动渲染:

 function ajax_action($data = null) { if($this->RequestHandler->isAjax()) { $this->autoRender = false; //process my data and return it return $data; } else { $this->Session->setFlash(__('Not an AJAX Query', true)); $this->redirect(array('action' => 'index')); } } 

试试这个:

在你的view文件夹中为相应的controller (my_controller)创建一个名为json的文件夹,并放置一个名为index.ctp的文件,并在该ctp文件中写下以下代码:

  

在你的my_controllerindex()写了这段代码:

 $this->set('yourVariableNameReturnedFromController', $this->YOURMODEL->find('all')); 

app_controller.php (如果不存在,你必须编写)编写此代码

 function beforeFilter(){ if ($this->RequestHandler->ext == 'json') { Configure::write('debug', 0); } } 

AutoRender = false并返回json_encode($ code)

 public function returningJsonData($estado_id){ $this->autoRender = false; return json_encode($this->ModelBla->find('first',array( 'conditions'=>array('Bla.bla_child_id'=>$estado_id) ))); }