2012-08-13 91 views
1

我目前正在發佈Zend表單驗證和Ajax的問題​​。我加載一個形式使用這種方法顯示在一個div容器:zend表單驗證+ ajax

$('#' + windowId).load('transfer/format/html/id/' + number); 

和傳輸控制器:

if ($this->_request->isXmlHttpRequest()) { 
} 

一切是偉大的,形式成功加載到一個div容器,我想是,但是當我試圖驗證它,然後它調用普通視圖,我得到一個表單,沒有以前的頁面包裝。任何人都知道如何驗證該表單並將其保存在同一個窗口中?

Regards,

回答

1

你能領導這樣的事情嗎? 你必須確定你想如何處理表格。 如果通過Ajax - 下面的例子。

<?php 
class TestController 
extends Zend_Controller_Action 
{ 


    function indexAction() { 

    } 

    // render form 
    function getFormAction() { 

     $form = new Zend_Form(); 
     $form->addElement('hidden', 'isSubmit', array(
      'value' => 1 
     )); 
     $form->addElement('text','foo', array(
      'required' => true 
     )); 
     $form->addElement('submit','Send', array(
      'label' => 'ok' 
     )); 

     // $data 
     if($_POST['isSubmit'] && $form->isValid($_POST)) { 
      // ............... 
     } 


     if($this->_request->isXmlHttpRequest()) { 
      // render only ajax content in layout-content.phtml 
      $this->_helper->layout->setLayout('layout-content'); 
     } else { 
      // render full page elements 
      $this->_helper->layout->setLayout('layout-default'); 
     } 

     $this->view->form = $form; 

    } 
} 

Temlates:

<!-- index.phtml  --> 
<div id="form-wrapper"></div> 

<script type="text/javascript"> 
<!-- 
    $(function() { 
     $("#form-wrapper").load("<?= $this->url(array('action'=>'get-form')) ?>"); 
    }); 
//--> 
</script> 
<!-- index.phtml  --> 

而且

<!-- get-form.phtml --> 
<?php 
if($this->form) { 
    $this->form->setAttrib('id', 'my-form'); 
    $this->form->setAction($this->url()); 
    echo $this->form; 
} 
?> 

<script type="text/javascript"> 
<!-- 
$(function() { 
    $('#my-form').submit(function() { 
     var f = $(this); 

     $.post(
      f.attr('action'), 
      f.serialize(), 
      function(data) { 
       $('#form-wrapper').html(data); 
      }  
     ); 

     return false; 
    }); 
}); 
//--> 
</script> 
<!-- /get-form.phtml  --> 

迎接pawella