2016-05-31 142 views
0

我使用AJAX将用户注册到服务。 以下是提交按钮的标记。为什么php的header()不工作?

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

和以下是注册()函数和其他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

附: - 该按钮位于引导模式上。

+1

你正在做一个ajax调用。这意味着只有ajax调用本身,而不是调用来自的页面,将被重定向。把某人送到商店去挑选某些东西,然后你去商店拿起同样的东西,这是区别的。如果商店外出,并告诉你去其他地方,你和“某人”将被重定向,但你不会知道这个人被重新定向,直到他们回到家并告诉你。 –

+0

当您提出有关错误的问题时,**总是**发布错误日志。要启用错误报告给你的php代码,追加'error_reporting(E_ALL); ini_set('display_errors','1');'在脚本的顶部,它返回什么? –

回答

0

重定向AJAX请求将不会改变该请求发自页。重定向发生之前的页面曾经被发送到客户端,但如果客户端发送一个AJAX请求,显然他们已经被发送的页面。

你可以做的是返回重定向URL返回给客户端的AJAX响应,然后使用JavaScript喜欢的东西来改变页面:

var ajaxResponse =... 

... 

location.href = ajaxResponse.responseText(); 
0

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

0

内侧,有人说要重定向请求,而不是当前页面。因此,在PHP代码的成功,返回这样的事情

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

那么阿贾克斯成功抢到就是redirect从数据里面,只是做

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

这样你就可以告诉调用页面中发客户端。