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

时间:2011-08-19 16:32:26

标签: jquery ajax cakephp

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

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

4 个答案:

答案 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)
    )));
}