cakephp-2.0 simplest ajax link with jshelper

6.6k Views Asked by At

I want to create the most basic ajax link there is in Cakephp 2.0.

In index.ctp i have

 <?php
echo $this->Js->link('myLink', array('controller'=>'technologies', 'action'=>'view'), array('update'=>'#success'));
?>
 <div id="success"></div>

in TechnologiesController.php i have

public function view(){
    $this->set('msg', 'message');
    $this->render('view', 'ajax'); 
}

and in view.ctp i have

<?php echo $msg;?>

Instead of setting the view in the success div, it navigates to the http://local.cake.com/technologies/view page to display the message.

Any help much appreciated!

6

There are 6 best solutions below

0
On BEST ANSWER

By default scripts are cached, and you must explicitly print out the cache. To do this at the end of each page, include this line just before the ending tag:

echo $this->Js->writeBuffer(); // Write cached scripts

I am using this at the end of my default.ctp in the Layouts Folder

0
On

I just put this:

echo $this->Js->writeBuffer();

it work for me, hope i will for you

0
On

try $this->autoRender = FALSE;

0
On

Be sure to set $components = array('RequestHandler') in your controller

0
On

I think you might have to put this:

echo $this->Js->writeBuffer();

somewhere - for example right below the $this->Js->link call.

Hope that helps!

0
On

So, in total the code would look like this - and it works for me (CakePHP 2.2.4):

index.ctp:

<?php
echo $this->Js->link('myLink', array('controller'=>'technologies', 'action'=>'view'), array('update'=>'#success'));
?>

<div id="success"></div>

echo $this->Js->writeBuffer();

Thank you a lot, this helped me understand how things work in 2.0 and above :)