【问题标题】:Passing validation from controller back to ajax function将验证从控制器传递回 ajax 函数
【发布时间】:2011-02-25 14:16:44
【问题描述】:

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

登录查看

<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. 
    }

}

【问题讨论】:

  • 你为什么要通过ajax做登录功能?这不是一个常见的情况。 ajax 函数无法处理您的重定向 - 请记住,这是您的浏览器的单独请求,因此重定向将不可见。我可以假设使用返回的任何响应来决定操作 - 显示内容或重定向等 - 但同样,重点是什么?
  • 我想我决定使用 ajax 是因为我有一个显示登录表单的 fancybox modal。我希望它在登录过程发生时有一个加载微调器。
  • 通过 AJAX 进行登录在本质上并没有降低安全性(只是指出)。

标签: php javascript ajax codeigniter jquery


【解决方案1】:

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
    }
}

【讨论】:

    【解决方案2】:

    您必须通过 javascript 处理重定向,因此在 ajax 成功处理程序中

    $.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 是布尔值 true/false,则直接回显它。

    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.
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2012-12-25
      • 2015-09-18
      • 1970-01-01
      • 2018-09-01
      • 2017-02-14
      • 2018-06-16
      相关资源
      最近更新 更多