Zend Framework 1.6 a ajax pomocí jQuery

Jak jsem psal v Zend Framework 1.6 a moje zkušenosti s Dojo TabContainer, nakonec jsem použil jQuery. Ve formuláři se dají měnit některá data, které jsou závislá na dalších, které automaticky předvyplňuji a na to jsem použil při změnách ajax. Docela mě potěšilo jak jednoduše a pěkně se to dá udělat pomocí jQuery.

<script>
$(document).ready(function(){
     $("#example > ul").tabs();
     $('#page1-deadline_vyzva').datepicker();
     $('#page3-datum_zahajeni').datepicker();
     $('#page3-datum_ukonceni').datepicker();

      $('#page1-editor').change(function(){
             $.ajax({
                        type: "POST",
                        url: "<?php echo $this->baseUrl();?>/user/info/idcvut/" + $(this).val(),
                        success: function(xml){
                    if ($.browser.msie)
                    {
                        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
                        xmlDoc.async="false";
                        xmlDoc.loadXML(xml);
                        $("#page1-navrhovatel_jmeno")[0].value = xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
                        $("#page1-navrhovatel_email")[0].value = xmlDoc.getElementsByTagName("email")[0].childNodes[0].nodeValue;
                        $("#page1-navrhovatel_telefon")[0].value = xmlDoc.getElementsByTagName("phone")[0].childNodes[0].nodeValue;
                        $("#page1-navrhovatel_pracoviste")[0].value = xmlDoc.getElementsByTagName("dept")[0].childNodes[0].nodeValue;
                    }
                    else
                    {
                    $("#page1-navrhovatel_jmeno")[0].value = $("name", xml).text();
                    $("#page1-navrhovatel_email")[0].value = $("email", xml).text();
                    $("#page1-navrhovatel_telefon")[0].value = $("phone", xml).text();
                    $("#page1-navrhovatel_pracoviste")[0].value = $("dept", xml).text();
                    }
                        }
             }); // end ajax
      }); // end change function
}); // end document ready
</script>
...

Původní skript jsem rošířil o několik dalších funkcí, přidal jsem datapickery pro datumy a potom ten ajax. Nejprve pomocí vybere prvek a přidáme mu attribut onChange.

$('#page1-editor').change(function(){ … });

Do této funkce jsem vložil volání ajaxu. Je to jednoduché a dobře pochopitelné. Type je typ GET nebo POST, v url je URL Controlleru, který vrací XML s potřebnými daty. Pomocí $(this.val) si šáhnu na vyplněnou hodnotu v políčku na které jsem aplikoval onChange(). Success vrací data, které si jednoduše parsuji přes $(“name”, xml).text(), kde name je <name></name> z xml dat, které posílá php.

Je to jednoduché a moc pěkný kód, který najde uplatnění. Dobré je, že není potřeba do formuláře přidávat do atributů funkci onchange, jak jsem to musel dělat, když jsem nepoužívat jQuery.

Ještě přidám část kódu z controlleru:

…
function infoAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->getHelper('ViewRenderer')->setNoRender();
$idcvut = (int)$this->_request->getParam('idcvut');
//echo $idcvut;
$ssu = new Usermap($this->config);
// make xml
//Zend_Debug($i);
$i=$ssu->getUsermapInfoByID($idcvut);
$xml = '<user><name>'.$i[‘cn’].'</name><email>'.$i['email'].'</email><phone>'.$i[‘phone’].'</phone><dept>'.$i[‘department’].'</dept></user>';
echo $xml;
}
…

Snad to někomu pomůže, moc příkladů na Zend a jQuery ajax jsem nikde nenašel.