2012-03-24 13 views
5

Sto usando il nuovo CakePHP 2.1 e vorrei utilizzare JsonView per far rispondere il mio controller a una richiesta AJAX creata da jQuery sul lato client.CakePHP 2.1 JsonView

Tuttavia, questo deve essere eseguito automaticamente con JsonView in base alla documentazione.

http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

Ho aggiunto questa linea nel mio file routes.php

Router::parseExtensions('json'); 

E nel mio controller ho

$this->RequestHandler->setContent('json', 'application/json'); 
$bookings = $this->Bookings->find('all'); 

$this->set('bookings', $bookings); 
$this->set('_serialize', 'bookings'); 

Poi la vista dovrebbe essere obsoleto, ma quando chiamo questo, serve ancora una pagina che punta a una vista mancante.

+0

Si prega di notare che non è necessario impostare 'application/json' esplicitamente. –

risposta

5

L'URL che si sta chiamando termina su ".json"?

+1

Questo fa davvero la differenza! Grazie. Un po 'strano che il .json è necessario per questo in un quadro che supporta la riscrittura url per seo ... –

+2

nessun problema. Ma questa è ovviamente una buona cosa. Quindi sai perfettamente quale chiamata alla tua pagina è stata una chiamata ajax e quale no (ad esempio in awstats o simili). Per non cedere a questi problemi in futuro, cerca di dare un'occhiata al codice core della torta. A seguito di una richiesta di entrare nel framework fino a quando non si entra nell'azione in un controller tramite il dumping di vars o le classi che riflettono, si mostra molto sul framework stesso. ;) Ma potresti chiedere ancora, anche; P – func0der

0

Hai aggiunto "RequestHandlerComponent" all'elenco dei componenti del controller?

sono andato l'altro percorso e ha creato una vista JSON: /app/View/Model/json/view.ctp

<?php 
echo json_encode(array(
'success' => TRUE 
)); 

E nel mio controller ho usato:

$this->viewClass = 'Json'; 

Saluti , James

+0

Potrebbe funzionare, ma stavo cercando la soluzione "facile" con JsonView, la risposta qui sotto rende obsoleta una vista in più ... –

2

Ho avuto alcuni problemi con Cake che mi ha chiesto di impostare esplicitamente la vista JSON. La vista XML caricata bene per impostazione predefinita non solo JSON.

ho fatto quanto segue nella mia funzione API:

if($this->RequestHandler->ext == 'json') { 
     $this->autoRender = false; 
     echo json_encode($results); 
    } else if($this->RequestHandler->ext == 'xml') { 
     $this->set(array(
      'results' => $results, 
      '_serialize' => array('results') 
     )); 
    }