jQuery AJAX in Zend Framework

I have posted a sample code on my wiki on how to submit variables to an action controller. The sample code contains a niffty jQuery plugin - the jQuery Calendar.

Click here for the tutorial.

Update (07-08-2008): For those who don’t know, Zend Framework has built-in stuff for Dojo. So you might want to check it out first. I still prefer jQuery though.

Update (05-07-2008): Since this post has been getting a lot of traffic and the tutorial to my wiki is not that good, I have decided to update this page and post a simpler and shorter tutorial.

So here it is…

The Javascript will look something like this:

//For Edit Action
f u n c t i o n editnote(notes_id)
{
//a sample loading image thingy
$('#notes_entry_id').prepend("
<p id="loading"><img src="http://blog.ekini.net/wp-admin/" /></p>
 
");
//Get notes from database - in ZF, notes = controller and getnoteforedit = action
$.post(baseUrl+"/notes/getnoteforedit",{
notes_id: notes_id
}, function(data){
$('#loading').remove();
obj = window.eval(data);
$('#textarea_id').val(obj['notes']);
}, "json"); //this returns JSON.
}

Then my controller would look something like this:

    /**
* Get note for action
*
*/
public function getnoteforeditAction()
{
$this->_helper->layout->disableLayout();    //disable layout
$this->_helper->viewRenderer->setNoRender(); //suppress auto-rendering
//the 2 lines above are very important. 
//this action would return html tags from the layout and will look for a phtml file. 
//we disable the layout and suppress auto-rendering of the phtml view files 
//SO that our JSON will be echoed properly to the Javascript...
require_once('models/Notes.php');
require_once('models/UsersNotes.php');
try {
if (!$this->_request->isPost()) {
throw new Exception('Invalid action. Not post.');
}
$Notes = new Notes();
$data = array();
if ($result = $Notes->fetchRow("notes_id=".$Notes->getAdapter()->quote($_POST['notes_id'])."")->toArray()) {
$data['notes_id']             = $result["notes_id"];
$data['notes']                = $result["notes"];
$data['datetime_posted'] = $result["datetime_posted"];
$data['status']               = $result["status"];
$json = Zend_Json::encode($data);    //basically, $data array will also be available in the JS.
} else {
throw new Exception('Note ID not found.');
}
echo $json; //this will echo JSON to the Javascript
unset($json);
unset($data);
} catch (Exception $e) {
echo $e->getMessage();
}
}

That’s about it… :D
The $data that was encoded using Zend_JSON in the controller/action can now be accessed in the Javascript after you call the eval().


Subscribe to comments Comment | Trackback |
Post Tags: , ,

Browse Timeline


Comments ( 4 )

I use jQuery-PHP library with ZF, see example on project homepage

Anton Shevchuk added these pithy words on Jun 10 08 at 2:13 pm

Thanks Anton. Have you created a proposal for this in ZF? It would be great if this made it to the official ZF release.

Wenbert added these pithy words on Jun 10 08 at 2:59 pm

couldnt u you do this in your controller? it works for me:

$this->_helper->json(Zend_Json::encode($array));

kevvy added these pithy words on Aug 17 08 at 12:38 pm

nice,http://news.wangmeng.cn/index

jezz added these pithy words on Apr 21 09 at 1:49 pm

Add a Comment


XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> <pre lang="" line="">


© Copyright 2007 eKini: Web Developer Blog . Thanks for visiting!