Thursday, January 23, 2014

Re: Little trick to return json

A far better, more scalable way of doing it (That is actually built into the framework):

routes.php
Router::parseExtensions();
Router::setExtensions(array('json', 'xml'));
 
AppController.php
class AppController extends Controller {
    public $components = array('RequestHandler');

Any controller action that you want to JSONify:
public function index() {
    $this->set('myData', $myData); 
    $this->set('_serialize', 'myData');
} 

Or, to match your original intentions, in AppController.php
class AppController extends Controller {
    public $components = array('RequestHandler');
 
    function beforeRender() {
       $this->set('_serialize', array_keys($this->viewVars));
    }
}

And then to make a request:
$.ajax({
url: "http://localhost/aplication/users",
type: "POST",
dataType: "json" //or xml if you want xml data
});

On Tuesday, 21 January 2014 17:59:11 UTC+2, Rubensvsx wrote:
Sorry for the poor english. 
I created a piece of code that solved my problem in returning a JSON object and helped me not to re-write all views. I await your feedback pros and cons.

 
class AppController extends Controller {
    public $components = array('RequestHandler');
 
    function beforeRender() {
        if ($this->RequestHandler->isAjax()) {
            $this->layout = 'ajax';
            $this->RequestHandler->setContent('json', 'application/json');
            $this->viewVars = json_encode($this->viewVars);
            return false;
        }
    }
}


If an Ajax request is performed automatically be returns a JSON object with the query result.

$.ajax({
url: "http://localhost/aplication/users",
type: "POST",
dataType: "json"
});

--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP
 
---
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cake-php+unsubscribe@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/groups/opt_out.

No comments: