将验证从控制器传递回ajax函数

将验证从控制器传递回ajax函数

问题描述:

我正在使用codeigniter和AJAX使用jQuery创建登录表单。我的问题是如何显示从codeigniter返回的验证错误。一切正常,如果他的用户登录正确,但我使用codeigniter中的验证工具,如果登录失败,我想在页面上显示这些错误。如何将控制器的验证错误传递回ajax函数calll的.success?我的代码在下面..谢谢!将验证从控制器传递回ajax函数

登录查看

<script type="text/javascript"> 

    $('#login_form').submit(function(e) { 

     var username = $('#username').val(); 
     var password = $('#password').val(); 

     var loginData = "&username=" + username + "&password=" + password; 

     $.ajax({ 
      type: "POST", 
      url: "<?php echo site_url('login/validate') ?>", 
      data: loginData, 
      success: function(data) { 

        //My question is how to dislpay data if validation_errors() has something and do nothing if login properly worked. 
      } 
     }); 
    }); 

</scirpt> 

<form id="login_form"> 
    Username: <input type="text" name="username" id="username" size="15" /><br /> 
    Password: <input type="password" name="passwort" id="password" size="15" /><br /> 
    <div align="center"> 
     <p><input type="submit" value="Login" /></p> 
    </div> 
</form> 

登录控制器

function validate() { 

    foreach($_POST as $key => $value) { 
     $$key = trime(value); 
    } 

    $query = ..... call the model to validate in DB this works and will return true or false if it authenticates... 

    if($query) { 
     //redirect to the loggedin view.. 
     rediect('site/loggedin'); 
    } 
    else { 

     //here I want to pass back the validation errors to be shown on the current view. 
    } 

} 
+0

你为什么试图通过ajax做登录功能?这不是一个常见的情况。您的重定向无法通过ajax函数处理 - 请记住,这是浏览器的单独请求,因此重定向将不可见。你可以使用任何响应返回来决定行动 - 显示内容或重定向等 - 但再次,有什么意义? – BrynJ 2011-02-25 14:40:33

+0

我想我决定使用阿贾克斯,因为我有一个fancybox模式显示登录表单。我希望它在登录过程发生时拥有一个加载微调器。 – codeigniterQuestion 2011-02-25 14:46:02

+0

通过AJAX执行登录并不安全(仅仅指出)。 – Jimbo 2014-06-01 18:52:30

你将不得不处理通过JavaScript重定向,所以在阿贾克斯成功处理程序

$.ajax({ 
    type: "POST", 
    url: "<?php echo site_url('login/validate') ?>", 
    data: loginData, 
    success: function(data) { 
     if (data) { //if the data returned is true (or 1) 
      window.location = "<?php echo site_url('controller/loggedin') ?>"; //javascript redirect 
     } 
     else {   //if the data returned is not true (or 0) 
      //show your error here 
     }    
    } 
}); 

和在您的控制器将根据登录的成功回复10。如果$query是一个布尔真/假,只是回声它。

function validate() { 

    foreach($_POST as $key => $value) { 
     $$key = trime(value); 
    } 

    $query = ..... call the model to validate in DB this works and will return true or false if it authenticates... 

    echo $query; //should be true/false which will be interpreted by the ajax success callback. 

} 

jondavidjohn是正确的点。然而,要得到验证,则需要通过AJAX返回VALIDATION_ERRORS():

你需要有一些地方,你把验证错误:

HTML

<div class="errors"></div> 

JQUERY

$.ajax({ 
    type: "POST", 
    url: "<?php echo site_url('login/validate') ?>", 
    data: loginData, 
    success: function(data) { 
     if (data == undefined) { 
      window.location = "<?php echo site_url('controller/loggedin') ?>"; //javascript redirect by jondavidjohn 
     } 
     else { 
      $('.errors').html(data); //how you get and set the errors to the html file 
     }    
    } 
}); 

PHP

function login() { 
    if ($this->form_validation->run() != TRUE) { 
     echo validation_errors(); // this returns the errors via ajax 
    } 
}