【问题标题】:My AJAX query isnt validating properly我的 AJAX 查询未正确验证
【发布时间】:2016-12-11 09:00:35
【问题描述】:

这里是网页设计的新手。我有一个登录表单,可以在 php 中验证并完美运行,但是当我尝试使用 ajax 进行验证时它不起作用。当我运行页面时,它说无论输入到表单中都是成功的。我已经尝试了好几天,试图让它以许多不同的方法进行验证。如果有更好的方法请告诉我!

这里是php,与登录表单在同一页面上

if (isset($_POST['login'])) {

    $email = mysqli_real_escape_string($con, $_POST['email']);
    $password = mysqli_real_escape_string($con, $_POST['password']);
    $result = mysqli_query($con, "SELECT * FROM users WHERE email = '" . $email. "' and password = '" . md5($password) . "'");

    if ($row = mysqli_fetch_array($result)) {
        echo json_encode('true');
        $_SESSION['usr_id'] = $row['id'];
        $_SESSION['usr_name'] = $row['name'];
        $_SESSION['logged_in'] = true;


    } else {
        echo json_encode('false');
        $errormsg = "Incorrect Email or Password!!!";
    }
}


?>

$(document).ready(function() {
  $('#login_submit').click(function() {
      var form = $('#login_form').serialize();
    $.ajax({
        type: "POST",
        url: "header.php",
        data: form,
        success:function (response){
                
                alert('Hi');
        
        },
        error: function(response){
                
                alert('Nope');
            
        }
          
        
   });
 });
});
<form id="login_form" form role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="loginform">
                
                <label class="login_form_labels"> Email:</label>
                
                <input type="email" id="email" class="login_input" name="email"><br><br>
                
                <label class="login_form_labels"> Password:</label>
                
                <input type="password" id="password" class="login_input" name="password"><br>
                
                <div id="stay_log">
                    Stay logged in.
                    
                    <input type="checkbox" name="stayLoggedIn" value=1 id="checkbox_1">
                    
                </div>
                
                
                <input class="login_form_btn" name="login" value="Submit" type="Submit" id="login_submit">
                
                <button class="login_form_btn" type="button">Forget your Password?</button>

            </form>

请帮忙!

【问题讨论】:

  • 它不能只说成功或不成功,大多数时候都会说你好
  • 你在 php 脚本中获取发布的数据吗??
  • 您需要查看success内的回复
  • 是的,php脚本获取数据,完美登录。
  • 在控制台上发布response 或在浏览器上使用断点检查您在response 中得到了什么

标签: php jquery ajax validation


【解决方案1】:

在您的 ajax 中将 dataType 设置为 Json,如下所示

$.ajax({
    type: "POST",
    url: "header.php",
    dataType: json,
    data: form,
    success:function (response){
            alert('Hi');
    },
    error: function(response){
            alert('Nope');
    }
});

试试这个……

【讨论】:

  • 似乎不起作用,当表单验证时仍然说不。
【解决方案2】:

我认为您需要来自服务器端的纯 JSON 响应并在您的 ajax 成功方法中处理它。

在您的 PHP 代码中。

$response=array();
if (!empty($_POST)) {
    $email = mysqli_real_escape_string($con, $_POST['email']);
    $password = mysqli_real_escape_string($con, $_POST['password']);
    $result = mysqli_query($con, "SELECT * FROM users WHERE email = '" . $email. "' and password = '" . md5($password) . "'");

    if ($row = mysqli_fetch_array($result)) {
        echo json_encode('true');
        $_SESSION['usr_id'] = $row['id'];
        $_SESSION['usr_name'] = $row['name'];
        $_SESSION['logged_in'] = true;


        $response['type']="success";
        $response['message']="Login done successfully";


    } else {
        $response['type']="error";
        $response['message']="Incorrect Email or Password!!!";
    }
}
else
{
    $response['type']="error";
    $response['message']="invalid post request";
}

ob_clean();
echo json_encode($response);
die();

从服务器通过上述方式,您只能以 json 格式响应。

在你的ajax调用javascript代码

$(document).ready(function() {
  $('#login_submit').click(function() {
      var form = $('#login_form').serialize();
    $.ajax({
        type: 'post',
        url: $('#login_form').attr("action"),
        data: form,
        dataType:'json'
        success:function (response){
                if(response.type=="success")
                {
                    alert(response.message);
                    // write code for handle your success login;
                }
                else
                {
                    alert(response.message);
                    // write code for handle your failure login;

                }

        },
        error: function(response){

                alert('Nope');

        }


   });
 });
});

您必须在 ajax 成功响应中处理来自服务器端的 JSON 响应

【讨论】:

  • {"type":"error","message":"invalid post request"} 这就是我这样做的全部。
  • 您的表单没有向您的 ajax 请求发送数据
  • 我已经修改了更改 ajax 请求 url 的答案。请检查一下。
  • 在 php 脚本中也更改了检查 $_POST 数据
【解决方案3】:

在 jQuery/AJAX 中,HTTP 响应代码终止它是否成功。因此,如果登录失败,您应该在 PHP 中设置一个标头来指示此失败。

if (.. login has failed .. ) {
  // HTTP 401 = 'Unauthorized'.
  http_response_code(401);  
}

通过这样做,您甚至不必处理生成的 JSON,只需获取更多信息即可。但基本结果足以告诉您:如果调用了success 回调,则登录成功。如果调用了error,无论出于何种原因,它都没有成功。

这设置了您的基本流程,然后您可以解析结果消息以查看正在发生的任何细节(内部服务器错误、用户未知、密码不匹配等)。

请参阅List of HTTP response codes,了解替代列表,this question 了解有关使用 401 的论证。

【讨论】:

    【解决方案4】:

    首先使用 alert(response) 找出您得到的响应。应该是真还是假。

    成功:函数(响应){

                if(response === "true") 
               {
                   alert("hi");
               }
               else
               {
                 alert("nope");
               }
        },
    

    【讨论】:

    • 您好,我没有得到回应。为什么会这样?
    • 在会话中添加值后尝试添加echo json_encode('true');
    • 那没有帮助 :( 呃它可能真的很容易我只是很新
    • @Mike,在 success:function(response) 中使用 alert(response) 后你得到了什么
    • 应该是response === "true"
    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 2014-01-08
    • 2013-06-11
    • 2023-03-17
    • 2021-08-25
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多