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
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.
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'
}
}
});
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);
$.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"
}
});
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.
Eine weitere Option ist:
window.location.replace("your_url")
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. :)
Ich denke du kannst das mit:
window.location = "your_url";
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/ .