为什么php的header()不起作用?

时间:2016-05-31 19:53:39

标签: javascript php jquery ajax bootstrap-modal

我正在使用AJAX将用户注册到服务。 以下是提交按钮的标记。

<input type="button" id="register" name="register" class="btn btn-success" onclick="registration();" value="Register"/>

以下是registration()函数和其他javascript -

    function registration()
    {
        var name = document.getElementById("regname").value;                
        var email = document.getElementById("regemail").value;              
        var pass = document.getElementById("regpassword").value;            
        var pass2 = document.getElementById("regreenterpassword").value;    
        var tagline = document.getElementById("tagline").value;
        registerOnDB();
    };
    var xmlHttpReg = createXmlHttpRequestObject();               //Calling the function to vaidate input credentials
    function createXmlHttpRequestObject()                        
    {
        var xmlHttpReg;

        if(window.ActiveXObject)                                 //If user is using internet Explorer
        {
            try
            {
                xmlHttpReg = new ActiveXObject("Microsoft.xmlHttp");
            }
            catch(e)
            {
                xmlHttpReg=false;
            }
        }
        else                                                     //If user is NOT using internet Explorer but any other browser
        {
            try
            {
                xmlHttpReg = new XMLHttpRequest();
            }
            catch(e)
            {
                xmlHttpReg=false;
            }
        }

        if(!xmlHttpReg)                                          //If Object can not be initialized.
            {
                alert("Can not create object");
            }
        else
        {
            return xmlHttpReg;
        }
    }
        function registerOnDB()
        {
            if(xmlHttpReg.readyState==0 || xmlHttpReg.readyState==4)                                              //If object state is either 0 OR 4 i.e. object not engaged otherwise.
            {
                var name = encodeURIComponent(document.getElementById("regname").value);
                var email = encodeURIComponent(document.getElementById("regemail").value);
                var pass = encodeURIComponent(document.getElementById("regpassword").value);
                var tagline = encodeURIComponent(document.getElementById("tagline").value);
                var parameters="name="+name+"&email="+email+"&pass="+pass+"&tagline="+tagline+"&loggedin=true"; 
                var url = "http://localhost/dashboard/x/php/register.php?"+parameters;                            //Sending Data to php script for validation
                xmlHttpReg.open("GET",url,true);                                                                  //Preparing to send request
                xmlHttpReg.onreadystatechange = handleServerResponseReg;                                          //Handling response that will come from php script
                xmlHttpReg.send();                                                                                //sending values to php script

            }
            else
            {
                setTimeout('registerOnDB()', 1000);                                                               //If reasyState is NOT 0 or 4 then repeat then wait and check again after 1 second.
            }
        }


    function handleServerResponseReg()
    {
        if(xmlHttpReg.readyState==4||xmlHttpReg.readyState==0)                                                //If object state is either 0 OR 4 i.e. object not engaged otherwise.
        {
            if(xmlHttpReg.status==200)                                                                        //status 200 means everything went OK
            {
                document.getElementById("errorpromptregister").innerHTML = xmlHttpReg.responseText;           //Putting out message received from XML on the screen at a div whose ID is errorprompt.
            }
            else
            {
                alert("xmlHttp.status!=200");
            }
        }
    }

以下是我的php文件的片段 -

if(mysql_query("INSERT INTO user_tbl(name, tagline, email, password, salt, otp) VALUES ('$name','$tagline','$email','$password','$salt', '$otp')"))
        {
            session_start();
            $_SESSION['email']=$email;
            header("Location : otp.php");
            exit();
        }

现在的问题是,即使我的php脚本能够写入数据库,它也不会重定向到otp.php 即标题功能不起作用。 请帮我解决一下如何从我的php脚本重定向到otp.php

P.S。 - 该按钮位于引导模式上。

3 个答案:

答案 0 :(得分:0)

重定向AJAX请求不会更改发送请求的页面。重定向发生在之前页面被发送到客户端,但如果客户端发送AJAX请求,显然他们已经发送了页面。

您可以做的是将重定向网址作为AJAX响应返回给客户端,然后使用Javascript更改页面,例如:

var ajaxResponse =... 

... 

location.href = ajaxResponse.responseText();

答案 1 :(得分:0)

而不是使用header()服务器端,在您的ajax成功回调中使用location.replace重定向到otp.php

答案 2 :(得分:0)

正如其他人所说,您正在重定向请求,而不是当前页面。所以关于php代码的成功,返回类似这样的东西

 echo json_encode( array( 'redirect' => 'http://your location' ));

然后在ajax成功中从数据中获取redirect并简单地执行

  $.post('location', {requestdata}, function(data){
     if( data.hasOwnProperty( 'redirect' ) ){
        window.location.href = data.redirect;
    }
 });

通过这种方式,您可以告诉调用页面将客户端发送到的位置。