【问题标题】:jQuery Form Validation redirect if success validation如果验证成功,则 jQuery 表单验证重定向
【发布时间】:2013-07-11 09:15:46
【问题描述】:

我有jQuery登录表单,功能是检查用户验证。

这里是 JS:

$(document).ready(function()
    {
        $('#button_sign_in').click(function(){
             console.log('login');
            $.ajax({
                url: "login",
                type: "post",
                data: $('#login_form').serialize(),
                success: function (data) {
                    //console.log('data:'+data);
                    if (data.user) {
                        $('#lblUsername').text(data.user.username);
                    }
                    else {
                        $('#button_sign_in').shake(4,6,700,'#CC2222');
                        $('#username').focus();
                    }
                },
                error: function (e) {
                    console.log('error:'+e);
                }
            });
        });
    });

逻辑是,如果用户名或密码错误,则按钮会抖动。如果登录正确,则重定向到主页。

这是我的 PHP 函数:

require ("functions/_db_.php");

$username = $_POST['username'];
$password = $_POST['password'];

$query = mysql_query("SELECT username, password FROM t_users WHERE username='$username' && password='$password'");
$found = mysql_num_rows($query);
if ($found > 0)
{
    header('location:home.php');
}

现在的问题是:如果登录更正,页面将不会重定向到主页。

有什么建议吗?

【问题讨论】:

    标签: php jquery ajax validation


    【解决方案1】:

    也许是因为您自己没有进行重定向?

    success: function (data) {
                        //console.log('data:'+data);
                        if (data.user) {
                            $('#lblUsername').text(data.user.username);
                            window.location = '/home.php'; // redirect to the homepage
                        }
                        else {
                            $('#button_sign_in').shake(4,6,700,'#CC2222');
                            $('#username').focus();
                        }
                    }
    

    如果您通过 AJAX 将其发送到客户端,则使用标头的 PHP 重定向将不起作用。在这种情况下,您必须使用 JS 在客户端重定向它。

    【讨论】:

      【解决方案2】:

      保持您的 PHP 脚本如下所示

              //Check your inputs against to mysql injections
              $username = mysql_real_escape_string($_POST['username']); 
              $password = mysql_real_escape_string($_POST['password']);
      
              $query = mysql_query("SELECT username, password FROM t_users WHERE username='$username' && password='$password'");
              $found = mysql_num_rows($query);
      
      
              if ($found > 0)
              {
                  $res='SUCCESS';
              }
              else
              {
                  $res='ERROR';
              }
      
              $ary=array("status"=>$res);
      
              echo json_encode($ary); //Json output - we are sending the assynchronus data in json format
      

      和你的脚本

      $.ajax
      ({
          url: "login",
          type: "post",
          data: $('#login_form').serialize(),
          dataType:'json', //We need ajax data in json type
          success: function (data) 
          {
              if (data.status=='SUCCESS') //status is proper of the json object, which we gave in php code in above script
              {
                  window.location='home.php'; 
              }
              else 
              {
                  $('#button_sign_in').shake(4,6,700,'#CC2222');
                  $('#username').focus();
              }
          },
          error: function (e) {
              console.log('error:'+e);
          }
      });
      

      【讨论】:

        【解决方案3】:
        if (data.user) 
        {
           $('#lblUsername').text(data.user.username);
           window.location = "home.php";
        }
        

        【讨论】:

          【解决方案4】:

          伙计,我认为您在 PHP 方面有问题,而不是在 javascript 方面。 考虑到这一点,这是您的解决方案,而不是位置,而是位置

          header('Location: http://www.example.com/');
          

          Document

          【讨论】:

          • 第一:请告诉我您是否从 $found 中获得了价值?第二:你有没有收到任何警告或通知,如果有,给我发消息
          • 这就是为什么,也许我遗漏了一些东西或者必须将价值从 $found 发送到 ajax 成功?那里没有错误。可以在bootply.com/tagged/modal看到demo,点击登录
          【解决方案5】:

          当您对 php 脚本进行 AJAX 调用时,调用 header() 不会在浏览器中加载新页面。您可以通过echo 'success/fail' 响应AJAX 调用,并通过检查AJAX 的success: 部分中的响应自行重定向到所需的页面。并且不要忘记设置php会话,并在登录后要显示的页面中检查用户登录是否成功。所以你在 php 中的代码将是,

          if ($found > 0) {
            //set session here
            echo 'success';
          }
          else
            echo 'fail';
          

          在 Ajax 中,

          success: function (data) {
            if (data == 'success') {
              window.location = "home_page.php";
            }
            else {
              $('#button_sign_in').shake(4,6,700,'#CC2222');
              $('#username').focus();
            }
          }
          

          在您的主页 php 中, 检查会话。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-05-13
            • 2011-05-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多