it-swarm.com.de

Seitenumleitung mit erfolgreicher Ajax-Anfrage

Ich habe ein Formular, das Ajax für die clientseitige Überprüfung verwendet. Das Ende des Formulars lautet wie folgt:

$.ajax({
        url: 'mail3.php',
        type: 'POST',
        data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam,

        success: function(result) {
            //console.log(result);
            $('#results,#errors').remove();
            $('#contactWrapper').append('<p id="results">' + result + '</p>');
            $('#loading').fadeOut(500, function() {
                $(this).remove();

            });

        }
    });

BEARBEITEN: Dies ist meine mail3.php-Datei, die Fehler behandelt:

$errors=null; 

if ( ($name == "Name") ) {
    $errors = $nameError; // no name entered
}
if ( ($email == "E-mail address") ) {
    $errors .= $emailError; // no email address entered
}
if ( !(preg_match($match,$email)) ) {
    $errors .= $invalidEmailError; // checks validity of email
}
if ( $spam != "10" ) {
    $errors .= $spamError; // spam error
}

if ( !($errors) ) {
    mail ($to, $subject, $message, $headers);
    //header ("Location: thankyou.html");
    echo "Your message was successfully sent!";
    //instead of echoing this message, I want a page redirect to thankyou.html

} else {
    echo "<p id='errors'>";
    echo $errors;
    echo "</p>";
}

Ich habe mich gefragt, ob es möglich ist, den Benutzer auf eine Danke-Seite umzuleiten, wenn die Ajax-Anforderung erfolgreich ist und keine Fehler vorhanden sind. Ist das möglich?

Danke! Amit

40
Amit

Sicher. Setzen Sie einfach etwas am Ende Ihrer Erfolgsfunktion:

if(result === "no_errors") location.href = "http://www.example.com/ThankYou.html"

wo Ihr Server die Antwort no_errors zurückgibt, wenn keine Fehler vorhanden sind.

35
Adam

Führen Sie einfach eine Fehlerprüfung durch, und wenn alles erfolgreich ist, legen Sie window.location fest, um den Benutzer auf eine andere Seite umzuleiten.

$.ajax({
    url: 'mail3.php',
    type: 'POST',
    data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam,

    success: function(result) {
        //console.log(result);
        $('#results,#errors').remove();
        $('#contactWrapper').append('<p id="results">' + result + '</p>');
        $('#loading').fadeOut(500, function() {
            $(this).remove();

        });

        if ( /*no errors*/ ) {
            window.location='thank-you.html'
        }

    }
});
15
tj111

Sie können einfach in Ihrem success-Handler wie folgt umleiten:

window.location.href = "thankyou.php";

Oder warten Sie einige Sekunden, da Sie Ergebnisse anzeigen. Dies würde beispielsweise 2 Sekunden dauern:

setTimeout(function() {
  window.location.href = "thankyou.php";
}, 2000);
11
Nick Craver
$.ajax({
        url: 'mail3.php',
        type: 'POST',
        data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam,

        success: function(result) {

            //console.log(result);
            $('#results,#errors').remove();
            $('#contactWrapper').append('<p id="results">' + result + '</p>');
            $('#loading').fadeOut(500, function() {
                $(this).remove();

            });

            if(result === "no_errors") location.href = "http://www.example.com/ThankYou.html"

        }
    });
2
morels

In Ihrer mail3.php-Datei sollten Sie Fehler in einem try {} catch {} abfangen.

try {
    /*code here for email*/
} catch (Exception $e) {
    header('HTTP/1.1 500 Internal Server Error');
}

Dann müssen Sie sich in Ihrem success-Aufruf keine Gedanken über Ihre Fehler machen, da er niemals als Erfolg zurückkehren wird.

und Sie können: window.location.href = "thankyou.php"; in Ihrer Erfolgsfunktion verwenden, wie Nick feststellte.

2
Jeremy Boyd

Eine weitere Option ist:

window.location.replace("your_url")
0
Aram Mutlu

Ich habe die genaue Situation in einem anderen Thread veröffentlicht. Re-post.

Entschuldigung, das ist keine Antwort auf die oben gestellte Frage.

Aber bringt ein interessantes Thema - WANN, um AJAX zu verwenden, und wenn AJAX NICHT verwendet wird. In diesem Fall ist es ratsam, AJAX nicht zu verwenden.

Nehmen wir ein einfaches Beispiel für Login und Passwort. Wenn der Benutzername und/oder das Passwort nicht übereinstimmen, wäre es nett, wenn Sie mit AJAX eine einfache Meldung mit der Meldung "Login False" zurückmelden. Aber wenn der Benutzername und das Kennwort IS korrekt sind, warum müsste ich dann eine Funktion AJAX aufrufen, um zur Benutzerseite umzuleiten?

In einem solchen Fall denke ich, dass es einfach schön wäre, ein einfaches Formular SUBMIT zu verwenden. Und wenn die Anmeldung fehlschlägt, leiten Sie zu Relogin.php um, die genauso aussieht wie Login.php mit einer GET-Nachricht in der URL wie Relogin.php? Error = InvalidLogin ... so ähnlich ...

Nur meine 2 Cent. :)

0
Nitin Hurkadli

Ich denke du kannst das mit: 

window.location = "your_url";
0
MilkyWayJoe

Ich vermute, Sie könnten dies auf zwei Arten angreifen.

1) Fügen Sie window.location = 'http://www.yourdomain.com in die Erfolgsfunktion ein.

2) Verwenden Sie einen weiteren Ajax-Aufruf und injizieren Sie diesen in ein Element auf Ihrer Seite. Weitere Informationen hierzu finden Sie in den jQuery-Dokumenten unter http://api.jquery.com/jQuery.get/ .

0
simnom