【问题标题】:Return false success in $.ajax jQuery在 $.ajax jQuery 中返回错误的成功
【发布时间】:2013-11-13 20:50:36
【问题描述】:

我使用的是 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 我的英语(如您所见,我是葡萄牙语),这是我第一次不用 Google 翻译。啊,如果也可以的话,请给我的语言能力打分好吗?哈哈哈

好的,再见!

更新

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

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

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

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

【问题讨论】:

  • 那么 AJAX 请求是否会返回?如果你在成功函数中设置了一个 alert(),它会被调用吗?
  • 当您返回"true" 时,您在success 中的data 是什么?
  • 使用 FireBug 之类的工具查看返回给 AJAX 调用的数据(它可以监控 .NET AJAX 请求并显示发送和检索的数据)。那么问题应该很容易找到。你的英语比我的葡萄牙语好多了:-)
  • 语言技能 = 非常好。虽然我不会说葡萄牙语,但我不会像你说英语那样说西班牙语。 :D
  • 这就是您的 PHP 文件中的全部内容吗?您是否收到任何服务器端错误?

标签: php jquery ajax


【解决方案1】:

是否有任何 avascript 错误?您使用的是 Firebug 还是 Google Chrome 控制台?如果是,请尝试在不进行任何重定向的情况下记录您的响应。我编写了简单的 ajax-request 并根据响应进行(或不)重定向。一切正常。 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>';

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

【讨论】:

  • 你好,鲁斯兰。也谢谢你的回复。所以,你的例子是有效的,但是,与我的脚本非常相似,真的。我使用 Chrome 控制台进行调试,无论是否重定向,控制台都不会显示错误。有什么建议么?如果非常有必要,我可以在这里发布完整的 php 源代码 - 但是,我该怎么做呢?
  • 你好,@Ruslan Polutsygan。现在我发布了完整的 php 源代码。如果可能,请检查一下。 :)
  • 要么你的 php 代码总是回显“真”,要么你的 js 代码有问题。尝试从服务器登录控制台响应。删除(或注释)回调函数中的所有代码并写入console.log(data)。然后尝试在 php 文件的最顶部写入 echo 'true'; die();echo 'error'; die();。使用打开的控制台运行您的应用程序,看看发生了什么。 data 在不同情况下的值是多少?实验,实验,实验:)
  • 你好,@Ruslan Polutsygan。如果我回显“true”,则在控制台中打印 True;如果我回显“错误”,请在控制台中打印 Echo。我认为问题出在 php 代码中。
  • 如果echo 'true'(或echo 'error')在php文件中被硬编码,重定向(或应用html代码)是否有效?如果是,那么问题肯定出在 php 代码中。尝试登录从服务器接收的控制台数据。您还可以为每个回显操作添加一些唯一的“id”,以确定脚本停止运行的确切位置。否则尝试直接从浏览器运行您的 php 代码(不使用 ajax)。调试,调试,调试:)
【解决方案2】:

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

【讨论】:

  • 我认为这不是问题
  • 你好,Vizath。谢谢你的回复。所以,3nigma 说的是事实。这种变化没有发生任何事情。 =/
猜你喜欢
  • 2011-11-24
  • 2023-03-24
  • 2014-12-23
  • 2016-03-25
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多