2012-12-10 101 views
1

我有一個小問題,我不知道如何解決。 Ajax驗證通過zend完美工作。 按提交按鈕確認,但是當我得到正確的電子郵件和密碼時,它不會進入用戶頁面。它只是保持這種形式。 我知道它與通過Ajax提交的return falsetrue有關。Zend Ajax提交表單

有人可以幫我解決這個問題。如果在驗證中檢測不到錯誤,我不知道如何對return true進行提交。

這裏是我的代碼: Ajax和JavaScript

$(function() { 
    $('input').blur(function() { 
     var formElementId = $(this).get(0).id; 
     doValidation(formElementId); 
    }); 
}); 

**$(function() { 
    $('#btn_login').click(function() { 
     var email = document.getElementById('email').id; 
     var password = document.getElementById('password').id; 
     doValidation(email); 
     doValidation(password); 
     return false; 
    }); 
});** 

function doValidation(id) { 
    var url = '/users/validationform'; 
    var data = {}; 
    $('input').each(function() { 
     data[$(this).attr('name')] = $(this).val(); 
    }); 
    $.post(url,data,function(resp) { 
     $("#" + id).parent().find('.errors').remove(); 
     $("#" + id).parent().append(getErrorHtml(resp[id], id)); 
    }, 'json'); 
} 

function getErrorHtml(formErrors, id) { 
    var o = '<div id="login-error" style="color:red"><ul id="errors-'+id+'" class="errors" style="list-style-type:none;">'; 
    for(errorKey in formErrors) { 
     o += '<li>- ' + formErrors[errorKey] + '</li>'; 
    } 
    o += '</ul></div>'; 
    return o; 
} 

的Zend控制器:

public function validationformAction() 
{ 
    $loginForm = new Application_Form_UserLogin(); 
    $loginForm->isValidPartial($_POST); 
    header('Content-type: application/json'); 
    $this->_helper->json($loginForm->getMessages()); 
} 
public function loginFormAction() 
{ 
    $this->_helper->layout()->disableLayout(); 
    //$this->_helper->viewRenderer->setNoRender(true); 

    $email = $this->getRequest()->getParam('email'); 
    $password = $this->getRequest()->getParam('password'); 

    $loginForm = new Application_Form_UserLogin(); 
    if ($this->getRequest()->isPost()) 
    { 
     /************ Login Form ************/ 
     if ($loginForm->isValid($this->getRequest()->getParams())) 
     { 
      $user = $this->_helper->model('Users')->createRow($loginForm->getValues()); 
      $user = $this->_helper->model('Users')->fetchRowByFields(array('email' => $email, 'hash' => $password)); 

      if($user) 
      { 
       Zend_Session::rememberMe(86400 * 14); 
       Zend_Auth::getInstance()->getStorage()->write($user); 
       $this->getHelper('redirector')->gotoRoute(array(), 'invite'); 
       return; 
      } 
      else { 
       // Error message 
       $this->view->errorMsg = "<b>password</b> - invalid, please try again! *"; 
      }    
     } 
     else 
     { 
      // something 
     } 
    }  
    $this->view->loginForm = $loginForm; 
} 

回答

0

嘗試提交方法,像這樣:$(formselector).submit();但是因爲你使用了ajax驗證,所以當你提交時,這是真正的問題。我認爲你可以爲all字段編寫單獨的驗證函數,並且可以使用ajax回調來提交。

或者嘗試jquery.validation http://bassistance.de/jquery-plugins/jquery-plugin-validation/,因爲它知道ajax服務器端驗證,並在有效時自動提交表單。

Sry基因我的英語,我來自匈牙利:d

+0

謝謝,我解決它。 – user1892860