ajax响应为空后JQuery无法工作

JQuery not working after null ajax responce

本文关键字:工作 JQuery 响应 ajax      更新时间:2024-05-10

我有Jquery代码

$(document).ready(function(){
$('#login').click(      
        function () {
            $.post('/profile/ajax/login', {
                    username: $('#username').val(),
                    password: $('#password').val(),
                },
                function (res) {
                    if (res != null) {
                        $.each(res, function (i, val) {
                            $('#login-error').html('<div class="alert alert-danger fade in"><a class="close" data-dismiss="alert" href="#">×</a>' + val + '!</div>');
                            return false;
                        });
                    } else { 
                        location.reload();
                    }
                },
                'json'
            );
        }
    );
}

并有PHP代码

if($_POST)
    {
        $username = $_POST['username'];
        $password = $_POST['password'];
        $post = Validation::factory($_POST);
        $post->rule('username', 'not_empty');
        $post->rule('password', 'not_empty');
        if($post->check())
        {
            if(!Auth::instance()->login($username, $password, true))
            {
                echo json_encode(array('Неверный Логин или Пароль'));   
            }
        }
        else
        {
            $errors = $post->errors('validation');
            echo json_encode($errors);
        }           
    }

如果Ajax返回一些带有错误的文本(res!=null),Jquery将正常工作。如果Ajax返回时没有任何信息,则"else"块中不会发生任何事情。

我该如何解决这个问题?

您指定的数据类型是json,因此如果返回值为null,则不会对其进行处理。尝试更改数据类型或在php文件中以json格式返回错误:)

检查res != null是问题所在。空数组无法与null进行比较。更改条件以检查阵列长度:

if (res.length > 0) {

其次,如果提交的凭据格式有效且正确,PHP将不返回任何内容。这将导致jQuery error处理程序而不是success被激发,因为空白响应不能被解析为JSON。添加另一个返回空数组的else子句:

if(!Auth::instance()->login($username, $password, true)){
    echo json_encode(array('Неверный Логин или Пароль'));   
} else {
    echo json_encode(array());   
}

尝试将您的PHP代码更改为:

$result = null;
if($_POST)
{
    $username = $_POST['username'];
    $password = $_POST['password'];
    $post = Validation::factory($_POST);
    $post->rule('username', 'not_empty');
    $post->rule('password', 'not_empty');
    if($post->check())
    {
        if(!Auth::instance()->login($username, $password, true))
        {
            $result = array('Неверный Логин или Пароль');   
        }
    }
    else
    {
        $result = $post->errors('validation');
    }           
}
echo json_encode($result);

这将导致在所有可能的情况下都对结果进行json编码。