0

Ajax ポスト リクエストを使用して、ユーザー タイプに基づいてさまざまなフォームを表示しようとしています。リクエスト応答は正常に機能しますが、フォームを表示する方法がわかりません。たとえば、ユーザーが親を選択した場合、親フォームを表示したいなどです。ZF 1.12 を使用しています。

public function init() {
    $contextSwitch = $this->_helper->getHelper('AjaxContext');
    $contextSwitch =$this->_helper->contextSwitch();
    $contextSwitch->addActionContext('index', 'json')
    ->setAutoJsonSerialization(false)
    ->initContext();
}

public function indexAction() {
    $this->view->user = $this->_userModel->loadUser($userId);
    //if($this->_request->isXmlHttpRequest()) {
        //$this->_helper->layout->disableLayout();
        //$this->_helper->viewRenderer->setNoRender(true);
    if ($this->getRequest()->isPost()){
        $type = $_POST['type'];
        $this->view->userForm = $this->getUserForm($type)->populate(
            $this->view->user
        );
    }
}

そして、これが私がクライアント側に持っているものです。成功セクションには何を書く必要がありますか?

<script type="text/javascript"> 
  $(document).ready(function(){
    $('#userType').on('change', function(){
      var type = $(this).val();
      select(type);
    });
  });

  function select(type) {
    $.ajax({
        type: "POST",
        url: "admin/index/",
        //Context: document.body,
        data: {'type':type},
        data: 'format=json',
        //dataType: "html",
        success: function(data){
         // what to do here?
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {}
    });
}
</script>
<form id="type" name="type" method="post" action="admin/index">
  <select name='userType' id='userType' size='30'>
    <option>admin</option>
    <option>parent</option>
    <option>teacher</option>
  </select>
</form>
<div id="show">
  <?php //echo $this->userForm;?>
</div>
4

1 に答える 1

1

ajax リクエスト フォームが Zend_Form から HTML を返す場合、その HTML を#showdiv に記述するだけで済みます。

ビューでは、これを行う必要があります:

echo $this->userForm;

このようにして、HTML ページに応答を送信する前に、必要なすべての HTML がサーバー側で書き込まれます。HTML ページでは、メソッドを使用して適切な場所に応答を書き込むだけです$('#show').html(data)。また、フォームをレンダリングするときに、各フォームが正しいアクションを持っていることを確認する必要があります。

もう 1 つのオプションは、ロード時に (Javascript を使用して) 3 つのフォームすべてをページに非表示にし、選択 (JS で生成) に基づいて正しいフォームを表示することです。この方法では、外部ソースからデータをロードする必要がなく、誰かが JS を無効にしている場合でも、アプリケーションを使用できます。一方、この方法では、各ページに約 1/2 KB 多いデータが読み込まれます。

于 2013-01-28T15:10:25.803 に答える