2012-03-24 8 views
5

Estoy usando el nuevo CakePHP 2.1 y me gustaría usar el JsonView para hacer que mi controlador responda a una solicitud AJAX creada por jQuery en el lado del cliente.CakePHP 2.1 JsonView

Sin embargo, esto se debe hacer automáticamente con el JsonView de acuerdo con la documentación.

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

I añadido esta línea en mi archivo routes.php

Router::parseExtensions('json'); 

Y en mi controlador tengo

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

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

A continuación, la vista debe ser obsoleta, pero cuando llamo esto, todavía sirve una página que apunta a una vista que falta.

+0

Tenga en cuenta que no es necesario para establecer aplicación '/ json' explícitamente. –

Respuesta

5

¿La url que está llamando termina en '.json'?

+1

¡Esto marca la diferencia! Gracias. Es un poco extraño que el .json sea necesario para esto en un marco que admita la reescritura url para seo ... –

+2

no hay problema. Pero esto es, por supuesto, algo bueno. Así que sabes perfectamente qué llamada a tu página fue una llamada ajax y cuál no (por ejemplo, en awstats o similar). Para no caer en este tipo de problemas en el futuro, intente echarle un vistazo al código central del pastel. Seguir una solicitud de entrar en el marco de trabajo hasta entrar en la acción en un controlador mediante vars dumping o reflejar clases te muestra mucho sobre el framework mismo. ;) Pero podrías preguntar otra vez, también; P – func0der

0

¿Ha agregado el "RequestHandlerComponent" a la lista de componentes de su controlador?

Fui la otra ruta y crea una vista JSON: /app/View/Model/json/view.ctp

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

Y en mi controlador que utiliza:

$this->viewClass = 'Json'; 

Saludos , James

+0

Podría funcionar, pero estaba buscando la solución "fácil" con JsonView, la respuesta a continuación hace que una vista adicional quede obsoleta ... –

2

Tuve algunos problemas con Cake que querían que estableciera explícitamente la vista json. La vista XML cargada correctamente de forma predeterminada simplemente no es json.

hice lo siguiente en mi función de la 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') 
     )); 
    }