CakePHP – Come restituire la stringa (come JSON) dal controller azione richiesta Ajax

Così ho il mio JavaScript fare una chiamata Ajax al /my_controller/ajax_action ma poi il controller non so cosa fare per uscita di qualcosa di nuovo per il JavaScript.

Io sono sempre errori, perché non c’è la vista per MyController::ajaxAction() ma ovviamente non c’è la vista di esso, quindi cosa devo fare?

google: sanisoft.com/blog/2010/10/25/…
Che cosa succede se la risposta non è JSON? Vorrei una soluzione che non solo restituiscono stringhe JSON, ma nulla.
beh, non è che il titolo della domanda dice ^^
Si dovrebbe sempre restituire JSON, se chiedi JSON (via .json estensione), per esempio. Cos’altro sarebbe? È possibile passare praticamente nulla con JSON. Vedere questo articolo dettagli su come raggiungere questo obiettivo.

OriginaleL’autore BadHorsie | 2011-08-19

4 Replies
  1. 8

    fare questo, è necessario che le variabili che si desidera in uscita in un array diciamo $data, quindi passare la matrice per la visualizzazione utilizzando il $this->set('data', $data); metodo, quindi creare una vista /General/SerializeJson.ctp. In che file a vista, mettere <?PHP echo json_encode($data); ?> dopo di che è possibile utilizzare $this->render('/General/SerializeJson'); e dovrebbe output json.

    Codice generale…

    /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/');
        }
    }

    /Vista/Generale/SerializeJson.ctp

    <?PHP echo json_encode($data); ?>

    OriginaleL’autore Saad Imran.

  2. 4

    Modo più semplice che ho trovato è stato quello di disabilitare il rendering automatico:

    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'));
        }   
    }

    OriginaleL’autore Shaz Amjad

  3. 3

    provare questo:

    interno del tuo view cartella per il corrispondente controller(mio controllore) creare una cartella denominata json e inserire un file denominato index.ctp e all’interno del ctp file di scrivere questo codice:

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

    interno del tuo my_controller in index() scritto questo codice:

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

    interno del tuo app_controller.php(se non esiste, hanno di fatto) scrivere questo codice

    function beforeFilter(){
      if ($this->RequestHandler->ext == 'json') {
         Configure::write('debug', 0);
      }
    }
    qui uso index() funzione per l’accesso json e il tuo url sarà simile a ‘/mio controllore/indice.json’

    OriginaleL’autore thecodeparadox

  4. 1

    AutoRender=false e Ritorno json_encode($codice)

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

    OriginaleL’autore Guilherme Ferreira

Lascia un commento