Ajax失败无响应


Ajax fail no response

我有登录页面。当我输入正确的登录数据ajax工作。但当我输入错误的登录名或密码脚本不返回错误。我如何解决这个问题,我在代码上犯了什么错误?Ajax脚本

function getdetails()
{
    var name = $('#user').val();
    var haslo = $('#pass').val();
    var request=$.ajax
    ({
        type: "POST",
        url: "login.php?id=0",
        data: {login:name, pass:haslo}
    });
    request.fail(function() { 
    alert("test");
    });
    request.done(function() {
    $('#logowanie').load('index.php #logowanie');
    });
};

表单代码

function logowanie()
{
    if(isset($_SESSION["login"]) && $_SESSION["login"]!==0)
    {
        echo '<div id="logowanie"> Witaj '.$_SESSION['nick'].' na forum';
        echo '<br/><a href="login.php?off=1">Wyloguj</a><br/>';
        if($_SESSION['power']>0)
            {echo '<a href="panel.php">Panel Admina</a>';}      
        echo '</div>';
    }
    else
    {
        $_SESSION["login"]=0;
        $_SESSION['power']=0;
        ?>
        <div id="logowanie">
        <font color="red"><B> Login</B></font><input type="text" name="user" size="8" id="user"><br/>
        <B><font color="red">Hasło</font></B><input type="password" name="pass" size="8" id="pass"><br/>
        <input type="submit" value="Zaloguj" name="przycisk" onClick ="getdetails()">Jeżeli nie posiadasz jeszcze konta <a href="login.php?id=1">zarejestruj się </a></div>'<?php
    }
}

表单检查

function werfikuj(){
$login=$_POST['login'];
$haslo=$_POST['pass'];
$zapytanie= 'Select * from users where login="'.$login.'" and haslo="'.md5($haslo).'"';
$result = $this->db->query($zapytanie);
if($result->num_rows==1) {  echo "Zalogowano poprawnie";$row = $result->fetch_assoc(); $_SESSION['login']=$row['id']; $_SESSION['nick']=$row['login']; $_SESSION['power']=$row['power'];}
else { die(json_encode('zly login lub haslo'));}

}

谢谢你的帮助。

Ajax不知道你想向Ajax调用显示错误,你的"Zalogowano apopawnie"消息和编码的"zly login lub haslo"消息对我来说毫无意义(我不知道你的语言)。如果您想告诉ajax这是一个错误,则需要使用不同的http响应代码进行响应。只有当出现HTTP错误响应时,才会调用"failed"方法。

如果您正在使用PHP5、

echo json_encode('zly login lub haslo');
http_response_code(404);
exit();

顺便说一句,我不知道你使用json_encode的意图。这可能最终无法解决您的问题。但我相信它回答了为什么你没有得到"错误"

或者,您也可以只返回一条"ok"或"failed"消息。Ajax将始终调用"done"方法。在"done"方法中,根据消息("ok"或"failed")触发不同的操作