【问题标题】:Zend Ajax submit formZend Ajax 提交表单
【发布时间】:2012-12-10 21:05:00
【问题描述】:

我有一个小问题,我不知道如何解决。 Ajax 验证通过 zend 完美运行。 按下提交按钮确实有效,但是当我得到正确的电子邮件和密码时,它不会进入用户页面。它只是保留在那个表格上。 我知道这与通过 Ajax 提交时的 return falsetrue 有关。

请有人帮我解决这个问题。如果在验证中没有检测到错误,我不知道如何在提交时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;
}

【问题讨论】:

    标签: php javascript ajax zend-framework


    【解决方案1】:

    试试提交方法,像这样:$(formselector).submit();但是因为你使用了ajax验证,这里真正的问题在于你提交的时候。我觉得你可以为all字段写单独的验证函数,可以使用ajax回调来提交。

    或者试试 jquery.validation http://bassistance.de/jquery-plugins/jquery-plugin-validation/ 因为它知道 ajax 服务器端验证,并在有效时自动提交表单。

    对不起,我的英语,我来自匈牙利:D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-06
      • 2011-06-17
      • 2014-02-19
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多