在$ .ajax jQuery中返回错误的成功

时间:2011-07-21 20:56:43

标签: php jquery ajax

我正在使用jQuery版本1.6.2,登录后我无法将用户重定向到主页面。实际上,我可以,但如果我这样做,我就无法显示“错误消息”。

你能帮助我吗?

我的jQuery代码:

$(".enviar").click(function() {
    var email = $(".postEmail");
    var setEmail = email.val();
    var senha = $(".postSenha");
    var setSenha = senha.val();

    $.ajax({
        url: "actions/logar.php",
        async: false,
        cache: false,
        type: 'POST',
        data: "email="+ setEmail +"&senha="+ setSenha,
        success:function(data){
            if(data == 'true'){
                window.location.href="home";
            } else {
                $(".resposta").html(data);
            }
        }
    });
    return false;
});

“.enviar”是我的提交按钮,而“.resposta”是div,我将显示错误消息。

我的PHP代码:     

        if(!$AccountDAO->Registrado()){
            $postEmail = addslashes(strip_tags(trim($_POST['email'])));
            $postSenha = addslashes(strip_tags(trim($_POST['senha'])));

            if ( !preg_match( '/^[^@]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $postEmail )){
                echo '<span class="error">O seu e-mail parece inválido</span>';
                exit();
            } elseif ( strlen($postSenha) < 4 ) {
                echo '<span class="error">Digite uma senha com quatro ou mais caracteres</span>';
                exit();
            } 

            $validarUsuario = $SQL->prepare("SELECT * FROM `c_usuarios` WHERE `email` = :email AND `senha` = :senha");
            $validarUsuario->bindParam( ':email', $postEmail, PDO::PARAM_STR );
            $validarUsuario->bindParam( ':senha', hash('sha512', $postSenha), PDO::PARAM_STR );
            $validarUsuario->execute();

            if( $validarUsuario->rowCount() == true ){

                $dadosUsuario = $validarUsuario->fetch(PDO::FETCH_ASSOC);
                $_SESSION['uid'] = $dadosUsuario['uid'];
                echo 'true';

            } else {

                echo '<span class="error">O e-mail ou a senha estão incorretos</span>';

            }
        }
?>

我已经尝试“return true”而不是“echo”true“”,但我得到了相同的结果:没有。 =(

好吧,抱歉4我的英语(我是葡萄牙语,你可以看到),这是我第一次没有谷歌翻译。啊,如果可能的话,请评价我的语言技能,好吗? HAHAH

好的,seeya!

更新

经过多次调查(?)之后,我得出结论:

之后的所有代码
            $dadosUsuario = $validarUsuario->fetch(PDO::FETCH_ASSOC);
            $_SESSION['uid'] = $dadosUsuario['uid'];

不执行。实际上,“true”(来自echo)执行正常,但“true”(字符串)有一个换行符。参见:

screenshot

我不明白! :S 如果我将`echo true'移动到我的源代码顶部,它会正常显示,没有换行符。

2 个答案:

答案 0 :(得分:2)

是否有任何avascript错误?您使用的是Firebug还是Google Chrome控制台?如果是,请尝试记录您的响应,而不进行任何重定向。我写了简单的ajax-request并根据响应make(或不)重定向。一切正常。 HTML:

<div id="wrapper">
    <form action="">
        <input type="submit" id="submit" />
    </form>
</div>

JS:

$('#submit').click(function(){
                $.ajax({
                    url: "ajax.php",
                    async: false,
                    cache: false,
                    type: 'POST',
                    data: "show=1",
                    success: function(data){
                        if(data=='true'){
                            window.location.href="other-page.html";
                        } else {
                            $("#wrapper").append(data);
                        }
                        console.log(data);
                    }
                });
                return false;
            });

非常简单的PHP:

if($_POST['show']==1)
    echo 'true';
else
    echo '<span class="error">Error</span>';

无论如何,尝试调试服务器的响应。 很抱歉有很多代码,但看不出你和我的代码之间的重要区别。也许你会。:) 我希望它会有所帮助。

答案 1 :(得分:0)

尝试添加域名。与window.location.href="http://example.com/home";

一样