CakePHP - Как вернуть строку (например, JSON) из действия контроллера в запрос Ajax - PullRequest
4 голосов
/ 19 августа 2011

Итак, мой JavaScript делает Ajax-вызов на /my_controller/ajax_action, но затем в контроллере я не знаю, что сделать, чтобы что-то вернуть обратно в JavaScript.

Я получаю ошибки, потому что нет представления для MyController::ajaxAction(), но, очевидно, нет представления для него, так что мне делать?

Ответы [ 4 ]

8 голосов
/ 19 августа 2011

сделайте это, у вас есть переменные, которые вы хотите вывести в массив, скажем, $data, затем передайте этот массив в представление, используя метод $this->set('data', $data);, затем создайте представление /General/SerializeJson.ctp. В этом файле представления поставьте <?PHP echo json_encode($data); ?>, после чего вы можете использовать $this->render('/General/SerializeJson');, и он должен вывести json.

Общий код ...

/ Контроллеры / 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 / Общие / SerializeJson.ctp

<?PHP echo json_encode($data); ?>
4 голосов
/ 21 августа 2011

Самый простой способ, который я нашел, это отключить автоматический рендеринг:

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'));
    }   
}
3 голосов
/ 19 августа 2011

попробуйте это:

в вашей папке view для соответствующего controller (my_controller) создайте папку с именем json и поместите файл с именем index.ctp, и в этом файле ctp напишите этот код:

<?php echo json_encode($yourVariableNameReturnedFromController); ?>

в вашем my_controller в index() написали этот код:

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

внутри вашего app_controller.php (если его не существует, вы должны это сделать), напишите этот код

function beforeFilter(){
  if ($this->RequestHandler->ext == 'json') {
     Configure::write('debug', 0);
  }
}
1 голос
/ 11 июля 2014

AutoRender = false и Return 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)
    )));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...