2017-02-15 5 views
0

Ich habe ein Formular, das auf eine modale Weise für die Registrierung/Anmeldung funktioniert. Der Teil des Registers funktioniert normal. Aber der Login-Teil hat ein Redirect-Problem ...PHP AJAX Redirect. [Hilfe]

Ich verwende diesen Code unten für AJAX. Ich habe viel über alles, was ich über windows.location gelesen habe, recherchiert, aber ich weiß nicht, wie ich es genau machen soll.

AJAX:

function logar(){ 

    $.ajax({ 
     method: "post", 
     url: "validalogin.php", 
     data: $("#login-form").serialize(), 
    success: function(data){ 

       alert(data); 
    } 

}); 
} 

PHP: ich die Kontrollen machen, die ich für notwendig halten vor und nach dem Versuch, eine Sitzung über ein Ergebnis in der Bank/Daten zu erstellen, die der Benutzer eingegeben ...

if ($result >1) { 
    session_name('nacional'); 
    session_start(); 
    $_SESSION['cpf']=$cpf; 
    $_SESSION['senha']=$senha; 


    header("Location: my_folder/index.php"); 

} 
  • Hinweis: das Header-Tag ist nicht ausgerichtet. Muss ich etwas tun, so wie der Server ein "OK" für Ajax zurückgibt und das Targeting ändert? Wenn ja, wie weiter?

Danke fürs Zuhören.

+1

Sie können nicht mit Header umleiten, wenn Sie Ajax verwenden –

+0

Warum Ajax hier verwenden, anstatt nur in das Login-Skript zu posten, wenn Sie sowieso sofort umleiten? – NotABlueWhale

+0

Wenn Sie es so machen wollten, könnten Sie die JavaScript-Umleitung mit window.location machen, wenn es eine bestimmte responseText-Anweisung von PHP übergibt. Zum Beispiel in PHP, wenn das Ergebnis> 1 ist, echo 1, und in JavaScript, wenn responseText == 1, Umleitung. –

Antwort

0

Sie sollten eine JSON-Antwort an Ihr JavaScript senden, anstatt eine Kopfzeile zurückzugeben. Der Header wird hinter den Kulissen umgeleitet. Tun Sie so etwas in Ihrem PHP:

return json_encode(['success' => true]); 

Dann fangen Sie es in Ihrer Erfolgsmethode von AJAX. Sie müssen Ihrem AJAX auch sagen, dass Sie JSON erwarten. Setzen Sie das nach Ihrer Methode und URL-Parameter, wie folgt:

function logar() { 
    $.ajax({ 
     method: "post", 
     url: "validalogin.php", 
     data: $("#login-form").serialize(), 
     dataType: 'json' 
    }) 
    .success(function(data){ 
     if (data.success == true) { 
      alert(data); 
      window.location.href = "folder/index.php"; 
     } 
    }); 
} 
+0

Ich bin ein wenig verwirrt durch einen Blick auf diesen zweiten Code, den ich gesendet habe, wenn möglich, Ihre Hilfe wird von großer Gültigkeit sein. Danke –

+0

Du bist fast da. Sie vergessen, die Klammer vor Ihrem "Erfolg" -Aufruf zu schließen. Sehen Sie sich meine bearbeitete Version Ihrer Logar-Funktion an. Ich habe auch den json_encode Teil repariert. Es erwartet ein Array. –

+0

So unglaublich es klingt, die "Rückkehr" funktionierte nicht, ich wechselte zu "Echo" und es funktionierte. Trotzdem danke. Sie sind Menschen wie Sie, die etwas bewirken. Sorry für Englisch auch, ich bin nicht in der Sprache geboren .... –

0

Ich habe noch nicht in der Lage, das Formular ordnungsgemäß funktionieren. Ich werde unten posten, wie ich den Code bekomme.

FORM: I had to send via image due to the organization of the code

AJAX (es ist auf der gleichen Seite wie das Formular.):

function logar(){ 

    $.ajax({ 
     method: "post", 
     url: "validalogin.php", 
     data: $("#login-form").serialize(), 
     dataType: 'json', 
    success: function(data){ 

     if (data.success == true) { 
      alert(data); 
      window.location.href = "folder/index.php"; 
      } 
     } 

}); 
} 

PHP: (ich einen Teil des Codes oben übersprungen, aber es wird das nicht beeinflussen Betrieb hier)

 $sql = "SELECT * FROM aluno_login WHERE cpf = '$cpf' and senha ='$senha' "; 

      $result = mysql_query($sql, $conexao); 
       while($linha = mysql_fetch_row($result)) { 

        if ($result <1){ 
         unset ($_SESSION['cpf']); 
         unset ($_SESSION['senha']); 
         session_destroy(); 
         //echo "Algo deu errado, tente novamente !"; 
         //return json_encode('Error' => false); 

        } 
        if ($result >1) { 
         session_name('nacional'); 
         session_start(); 
         $_SESSION['cpf']=$cpf; 
         $_SESSION['senha']=$senha; 
         return json_encode('success' => true); 





        } 

Sollte das funktionieren?