2016-05-31 15 views
0

私はAJAXを使ってユーザーをサービスに登録しています。 送信ボタンのマークアップは次のとおりです。phpのheader()がうまくいかないのはなぜですか?

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

、次の

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のスニペットは、今の問題も私のphpかかわらことを登録()関数およびその他の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"); 
      } 
     } 
    } 

次のようになりされますスクリプトがotp.php にリダイレクトされていない、すなわちヘッダー機能が動作していない、データベースに書き込むことができます。 ここから私のPHPスクリプトからotp.phpにリダイレクトする方法を教えてください。

P.S. - ボタンはブートストラップモーダルにあります。

+1

あなたはajaxコールを行っています。これは、呼び出し元のページではなく、ajax呼び出し自体だけがリダイレクトされることを意味します。それは、店に誰かを送って何かを拾うことと、店に行って同じことをすることの違いです。店舗が出て別の場所に行くよう指示された場合、あなたと「誰か」の両方がリダイレクトされますが、家に帰ってきてあなたに伝えるまで、誰かがリダイレクトされたことはわかりません。 –

+0

エラーについて質問をすると、**常にエラーログがポストされます。あなたのPHPコードへのエラー報告を有効にするには、 'error_reporting(E_ALL);を追加します。 ini_set( 'display_errors'、 '1'); 'スクリプトの先頭には何が返されますか? –

答えて

0

AJAXリクエストをリダイレクトしても、リクエストが送信されたページは変更されません。リダイレクトはの前にのページがクライアントに送信されますが、クライアントがAJAXリクエストを送信している場合は、すでにページが送信されていることは明らかです。 location.replaceを使用し、代わりにheader()サーバー側を使用しての

var ajaxResponse =... 

... 

location.href = ajaxResponse.responseText(); 
0

:あなたは何ができるか

のようなものを使用してページを変更するにはJavascriptを使用し、その後、AJAXの応答としてクライアントに戻すリダイレクトURLを返すですあなたのajax成功のコールバックのotp.phpにリダイレクト

0

他の人は、現在のページではなくリクエストをリダイレクトしていると言いました。だから、PHPコードの成功に、データからredirectと単純には

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

あなたが送信先を呼び出しページを伝えることができるこの方法を行うことアヤックス成功のグラブの内側に、この

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

のようなものを返しますクライアントに。

関連する問題