研究一篇老外的文章:在zend framework中使用jquery ,原文见
- http://blog.ekini.net/2007/08/28/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 (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
function editnote(notes_id)
{
//a sample loading image thingy
$(‘#notes_entry_id’).prepend("<div id="’loading’"><a></a></div>");
//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… ![]()
The $data that was encoded using Zend_JSON in the controller/action can now be accessed in the Javascript after you call the eval().

Post a Comment