所以我让我的JavaScript对/my_controller/ajax_action
进行Ajax调用,但是在控制器中我不知道如何将某些内容输出回JavaScript。
我收到错误,因为MyController::ajaxAction()
没有视图,但显然没有视图,所以我该怎么办?
答案 0 :(得分:8)
执行此操作,将要输出的变量放在数组中,然后使用$data
方法将该数组传递给视图,然后创建视图$this->set('data', $data);
。在该视图文件中,在此之后添加/General/SerializeJson.ctp
,您可以使用<?PHP echo json_encode($data); ?>
并输出json。
一般代码......
<强> /Controllers/MyController.php 强>
$this->render('/General/SerializeJson');
<强> /Views/General/SerializeJson.ctp 强>
public class MyController extends AppController
{
public function ajaxAction()
{
$data = Array(
"name" => "Saad Imran",
"age" => 19
);
$this->set('data', $data);
$this->render('/General/SerializeJson/');
}
}
答案 1 :(得分:4)
我发现最简单的方法是禁用自动渲染:
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'));
}
}
答案 2 :(得分:3)
试试这个:
在相应view
(my_controller)的controller
文件夹中创建一个名为json
的文件夹并放置一个名为index.ctp
的文件,并在该ctp文件中写下以下代码:
<?php echo json_encode($yourVariableNameReturnedFromController); ?>
<{1}} my_controller
index()
内写了这段代码:
$this->set('yourVariableNameReturnedFromController', $this->YOURMODEL->find('all'));
在您的app_controller.php
内(如果不存在,则必须编写此代码)
function beforeFilter(){
if ($this->RequestHandler->ext == 'json') {
Configure::write('debug', 0);
}
}
答案 3 :(得分:1)
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)
)));
}