2016-05-31 8 views
0

Ich benutze AJAX, um Benutzer zu einem Dienst zu registrieren. Im Folgenden finden Sie das Markup der Schaltfläche zum Senden.Warum funktioniert header() von php nicht?

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

und folgend ist die Registrierung() -Funktion und andere 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"); 
      } 
     } 
    } 

Nach einem Ausschnitt aus meiner PHP ist File-

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(); 
     } 

Das Problem ist jetzt, dass, obwohl meine php Skript kann in die Datenbank schreiben, die es nicht zu otp.php umleiten, dh Header-Funktion funktioniert nicht. Bitte helfen Sie mir hier auf, wie kann ich von meinem PHP-Skript auf otp.php umleiten

P.S. - Der Button befindet sich auf einem Bootstrap Modal.

+1

Sie tun einen Ajax-Anruf. Das bedeutet, dass nur der Ajax-Aufruf selbst und nicht die Seite, von der der Anruf kam, umgeleitet wird. Es ist der Unterschied zwischen jemandem in den Laden zu schicken, um etwas abzuholen, und du gehst in den Laden, um das gleiche aufzuheben. Wenn der Laden draußen ist und dir sagt, dass du an einen anderen Ort gehen sollst, werden sowohl du als auch der "Jemand" umgeleitet, aber DU wirst nicht wissen, dass jemand umgeleitet wurde, bis sie nach Hause kommen und es dir sagen. –

+0

Wenn Sie eine Frage zu einem Fehler stellen, ** schreiben Sie IMMER ** das Fehlerprotokoll. Um die Fehlermeldung zu Ihrem PHP-Code zu aktivieren, hängen Sie 'error_reporting (E_ALL); ini_set ('display_errors', '1'); 'kommt am Anfang des Skripts zurück? –

Antwort

0

Die Umleitung einer AJAX-Anfrage ändert nicht die Seite, von der die Anfrage gesendet wurde. Redirects passieren vor die Seite wird jemals an den Client gesendet, aber wenn der Client eine AJAX-Anfrage sendet, offensichtlich wurden sie bereits die Seite gesendet.

Was Sie tun können, die Umleitungs-URL zurück an den Client als AJAX Antwort ist zurück, dann Javascript verwenden, um die Seite mit so etwas wie zu ändern:

var ajaxResponse =... 

... 

location.href = ajaxResponse.responseText(); 
0

der Verwendung header() serverseitigen Verwenden Sie stattdessen location.replace Weiterleiten an otp.php in Ihrem Ajax-Erfolg Rückruf

0

Wie andere sagten, Sie leiten die Anfrage umleiten, nicht die aktuelle Seite. Also auf Erfolg des PHP-Code, gibt so etwas wie diese

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

dann innerhalb des Ajax-Erfolg greifen, dass redirect von Daten und einfach tun

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

Auf diese Weise kann der anrufende Seite, wo sagen kann schicken der Kunde zu.

Verwandte Themen