Reputation: 22264
I'm invoking a controller function:
$.get("http://localhost/universityapp/courses/listnames", function(data){
alert("Data Loaded: " + data);
});
And in my Controller:
public function listnames() {
$data = Array(
"name" => "Sergio",
"age" => 23
);
$this->set('test', $data);
$this->render('/Elements/ajaxreturn'); // This View is declared at /Elements/ajaxreturn.ctp
}
And in that View:
<?php echo json_encode($asdf); ?>
However, the Action is returning the entire page including the Layout content (header, footer, navigation).
What am I missing here? How can I return just the JSON data without the Layout content?
Upvotes: 9
Views: 27711
Reputation: 2369
Set autoRender=false
and 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)
)));
}
Upvotes: 32
Reputation: 4177
You can try any of the following to return json response (I've taken failure case here to return json response) :
public function action() {
$this->response->body(json_encode(array(
'success' => 0,
'message' => 'Invalid request.'
)));
$this->response->send();
$this->_stop();
}
OR
public function action() {
$this->layout = false;
$this->autoRender = false;
return json_encode(array(
'success' => 0,
'message' => 'Invalid request.'
));
}
Upvotes: 1
Reputation: 8461
You need to disable layout like this
$this->layout = null ;
Now your action will become
public function listnames() {
$this->layout = null ;
$data = Array(
"name" => "Sergio",
"age" => 23
);
$this->set('test', $data);
$this->render('/Elements/ajaxreturn'); // This View is declared at /Elements/ajaxreturn.ctp
}
Upvotes: 10