A web developer's blog. PHP, MySQL, CakePHP, Zend Framework, Wordpress, Code Igniter, Django, Python, CSS, Javascript, jQuery, Knockout.js, and other web development topics.

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
function 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().

This entry was posted in General and tagged , , . Bookmark the permalink.

6 Responses to jQuery AJAX in Zend Framework

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

  2. Wenbert says:

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

  3. kevvy says:

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

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

  4. Ralph Jones says:

    i used simple jQuery method .
    just included the JS file in main layout and just disabled the layout for some views which i call them by ajax and it works :P
    my project was very simple by the way .

    $this->_helper->layout->disableLayout();

  5. almix says:

    Thanks, this article helped me in work.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>