应用jQuery后,php标头无法正常工作

时间:2013-07-30 17:16:26

标签: php jquery html ajax

// script.js

$(document).ready(function(){
    $(".loginProzor").hide();
    $(".login").click(function(){
        $(".loginProzor").fadeToggle(300);
    });

    $("#prijavi").click(function(){
        if($("#user").val() == "" || $("#pass").val() == ""){
            $("#labelGreska").html("Unesite korisničke podatke");
        }
        else{
            $.post($("#forma").attr("action"), $("#forma :input").serialize(), 
            function(data){
                $("#labelGreska").html(data);
            });}

        $("#forma").submit(function(){
            return false;
        });

    });
});

//表单

<form id="forma" action="login.php" method="post">
                            <label>Korisničko ime</label><br>
                            <input type="text" name="user" id="user"><br>
                            <label>Lozinka</label><br>
                            <input type="password" name="pass" id="pass"><br>
                            <input type="submit" value="Prijavi se" id="prijavi">   
                            <label id="labelGreska"></label>                        
                        </form>

// login.php中

<?php

    include 'funkcije.php';
    include 'spojiBazu.php';

    $user = $_POST['user'];
    $pass = $_POST['pass'];

    if(!$user){
        $greske[] = 'Unesite korisničko ime';
    }
    $pass = md5($pass);
    $ucitaj = mysql_query("select * from login where username = '$user' and password = '$pass'");
    session_start();
    if(mysql_num_rows($ucitaj) === 0){
        echo 'Korisnički podaci nisu validni, molimo pokušajte ponovo.';
    }else{
        $korisnik = mysql_query("select username from login where username = '$user'");
        $podatak = mysql_result($korisnik, 0);

        $_SESSION['user'] = $podatak;
        header("Location: index.php");
    }


?>

您好

我正在学习网页开发,但我遇到了一个问题。我创建了简单的登录表单。它使用jQuery评估一些错误,其余的错误使用PHP进行评估。除了PHP中的Header命令外,一切正常。当用户成功登录时,header命令应重定向到index.php,以便用户可以验证它是否已登录,但在这种情况下,标头标记不起作用。 在应用jQuery之前(所有错误都由PHP处理)header命令没有问题。你能告诉我这里有什么问题吗?

3 个答案:

答案 0 :(得分:1)

详细信息,

由于AJAX发生在“幕后”(可以这么说),你的重定向只会中断对你的javascript处理程序的响应。所以PHP现在无法重定向您的浏览器,jQuery可以。所以使用 jQuery来重定向用户。

您需要返回该网址,并让您的回调将浏览器踢到新位置。

在此注释中,由于您必须将数据返回到前端,因此您需要添加status或类似变量,以便根据呼叫是否“失败”切换前端行为或不。

Marc B指出的确切,

你正在进行ajax调用 - php标题将重定向ajax响应...而不是用户当前所在的页面。你必须在客户端修改你的javascript代码才能更改位置。

javascript重定向与window.location.href = "http://mylocation";一样简单。

解决您的问题,

JQUERY

// script.js

$(document).ready(function(){
    $(".loginProzor").hide();
    $(".login").click(function(){
        $(".loginProzor").fadeToggle(300);
    });

    $("#prijavi").click(function(){
        if($("#user").val() == "" || $("#pass").val() == ""){
            $("#labelGreska").html("Unesite korisničke podatke");
        }
        else{
            $.post($("#forma").attr("action"), $("#forma :input").serialize(), 
            function(data){
                if(data=="success"){
                                 window.location.href = "index.php";
                            } else{
                                 alert("login failed");
                            }
            });
                }
        $("#forma").submit(function(){
            return false;
        });

    });
});

PHP

<?php

    include 'funkcije.php';
    include 'spojiBazu.php';

    $user = $_POST['user'];
    $pass = $_POST['pass'];

    if(!$user){
        $greske[] = 'Unesite korisničko ime';
    }
    $pass = md5($pass);
    $ucitaj = mysql_query("select * from login where username = '$user' and password = '$pass'");
    session_start();
    if(mysql_num_rows($ucitaj) === 0){
        echo 'failed';
            exit;
    }else{
        $korisnik = mysql_query("select username from login where username = '$user'");
        $podatak = mysql_result($korisnik, 0);

        $_SESSION['user'] = $podatak;
        echo "success";
    }


?>

答案 1 :(得分:0)

来自http://www.php.net/manual/en/function.header.php

  

请记住,在任何实际输出之前必须调用header()   通过普通HTML标记,文件中的空行或PHP发送。   使用include或require读取代码是一个非常常见的错误,   函数或其他文件访问函数,并且有空格或空   调用header()之前输出的行。

您可以尝试使用javascript重定向或使用标题处的头部重新创建源代码

答案 2 :(得分:0)

输出回显到屏幕后,

header()将无效。

检查funkcije.php和spojiBazu.php以查看是否有任何回声发生。如果他们是你需要找到一种方法,在login.php中调用header()之前从那些文件中删除回声。