php - 在 $.ajax jQuery 中返回 false 成功

标签 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 我的英语(我是葡萄牙语,如你所见),这是我第一次不用谷歌翻译。啊,如果可以的话,请评价一下我的语言能力,好吗?哈哈

好的,再见!

更新

经过多次调试(?),我得出的结论是以下所有代码

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

不执行。事实上,“true”(来自 echo)正常执行,但“true”(字符串)有换行符。请参阅:

screenshot

我不明白! :S 如果我将“echo true”移至源代码的顶部,它将正常显示,没有换行符。

最佳答案

有任何 JavaScript 错误吗?您使用的是 Firebug 或 Google Chrome 控制台吗?如果是,请尝试在不进行任何重定向的情况下记录您的响应。我编写了简单的 ajax 请求,并根据响应进行(或不进行)重定向。一切正常。 网页:

<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>';

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

关于php - 在 $.ajax jQuery 中返回 false 成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6782686/

相关文章:

javascript - 如何使用ACE编辑器?如何将 JS 编辑器更改为 PHP 编辑器或其他语言?

javascript - 在 Dev Tools -> Resources -> Frames 下获取 Element

javascript - jQuery every 不适用于某些类或一般类?

javascript - 最佳服务器 API 和客户端 Javascript 交互方法?

javascript - Moqui AJAX 调用问题

javascript - 使用javascript更改页面标题

php - iOS 推送通知 PHP 错误

php - 在 SQL 查询、PHP 中添加变量和常量的简短语法

php - 如果临时密码与数据库中的密码匹配,则更新新密码

javascript - 当在其他地方以编程方式选中复选框时,如何使 jQuery 代码执行?