it-swarm.com.de

Verhindern Sie die Weiterleitung, nachdem das Formular gesendet wurde

Ich habe ein HTML-Formular, das eine E-Mail mit PHP übermittelt, und wenn es gesendet wird, leitet es auf diese PHP - Seite um. Gibt es eine Möglichkeit, diese Weiterleitung zu verhindern? Ich habe eine Animation mit jQuery erstellt, die ich ausführen möchte, anstatt umzuleiten. Ich habe versucht, false zurückzugeben, aber es würde nicht funktionieren. Hier ist meine Funktion:

$(function() {
    $('.submit').click(function() {
        $('#registerform').submit();
        return false;
    }); 
});

Hier ist das Eröffnungsformular-Tag:

<form id="registerform" action="submit.php" method="post">

Und die Senden-Schaltfläche:

<input type="submit" value="SUBMIT" class="submit" />
20
Robert Pessagno

Sie sollten es mit ajax posten. Dadurch wird verhindert, dass die Seite geändert wird, und die Informationen werden weiterhin zurückgegeben.

$(function() {
    $('form').submit(function() {
        $.ajax({
            type: 'POST',
            url: 'submit.php',
            data: { username: $(this).name.value, 
                    password: $(this).password.value }
        });
        return false;
    }); 
})

Siehe Post-Dokumentation für JQuery

34
Bruce Armstrong

Statt false zurückzugeben, können Sie event.preventDefault () versuchen. so was:

$(function() {
$('#registerform').submit(function(event) {
    event.preventDefault();
    $(this).submit();
    }); 
});
11
bozdoz

Ajax verwenden

Mit der jQuery Ajax request-Methode können Sie die E-Mail-Daten in einem Skript (submit.php) veröffentlichen. Verwenden der Option success callback zum Animieren von Elementen nach der Ausführung des Skripts.

note - Ich würde vorschlagen, das ajax Response Object zu verwenden, um sicherzustellen, dass das Skript erfolgreich ausgeführt wird.

$(function() {
    $('.submit').click(function() {
        $.ajax({
            type: 'POST',
            url: 'submit.php',
            data: 'password=p4ssw0rt',
            error: function()
            {
               alert("Request Failed");
            },
            success: function(response)
            {  
               //EXECUTE ANIMATION HERE
            } // this was missing
        });
        return false;
    }); 
})
5
Derek Adair
$('#registerform').submit(function(e) {
   e.preventDefault();
   $.ajax({
        type: 'POST',
        url: 'submit.php',
        data: $(this).serialize(),
        beforeSend: //do something
        complete: //do something
        success: //do something for example if the request response is success play your animation...
   });

})
5
Matricore

Wenn Sie möchten, dass die Informationen im Formular von der Seite PHP verarbeitet werden, MÜSSEN Sie diese Seite PHP aufrufen. Um eine Umleitung oder Aktualisierung in diesem Prozess zu vermeiden, senden Sie die Formularinformationen über AJAX. Verwenden Sie jQuery möglicherweise zum Anzeigen der Ergebnisse oder Ihrer benutzerdefinierten Animation.

5
mwotton

Ohne genau zu wissen, was Sie hier zu erreichen versuchen, ist es schwer zu sagen, aber wenn Sie die Zeit verbringen, um dieses Problem mit Javascript zu lösen, ist eine AJAX - Anfrage die beste Wahl. Wenn Sie dies jedoch vollständig in PHP ausführen möchten, setzen Sie dies am Ende Ihres Skripts ein, und Sie sollten festgelegt sein.

if(isset($_SERVER['HTTP_REFERER'])){
    header("Location: " . $_SERVER['HTTP_REFERER']);    
} else {
    echo "An Error";
}

Dadurch wird die Seite zwar zweimal geändert, der Benutzer endet jedoch auf der Seite, die die Anforderung initiiert. Dies ist nicht annähernd der richtige Weg, um dies zu tun, und ich empfehle dringend die Verwendung einer AJAX - Anforderung, aber es wird die Arbeit erledigen.

4
Steven Zurek

Wenn Sie Javascript ausführen können, das anscheinend so ist, wie Sie es können, erstellen Sie einen neuen Iframe und veröffentlichen Sie ihn in diesem Iframe. Sie können <form target="iframe-id" ...> tun. Auf diese Weise finden alle Umleitungen im iframe statt und Sie haben immer noch die Kontrolle über die Seite. 

Die andere Lösung besteht darin, auch einen Beitrag über Ajax zu erstellen. Das ist jedoch etwas schwieriger, wenn die Seite eine Fehlerprüfung oder etwas anderes benötigt. 

Hier ist ein Beispiel:

$("<iframe id='test' />").appendTo(document.body);
$("form").attr("target", "test");
3
Amir Raminfar

Sie können wie unten verwenden

e.preventDefault() 

Wenn diese Methode aufgerufen wird, wird die Standardaktion des Ereignisses nicht ausgelöst.

Auch wenn ich vorschlagen kann, lesen Sie dies: .prop () vs .attr ()

Ich hoffe es hilft dir,

codebeispiel:

$('a').click(function(event){
    event.preventDefault();
    //do what you want
  } 
1
gargAman

Die einfache Antwort besteht darin, Ihren Anruf mit der Anforderung AJAX an ein externes Skript abzusprechen. Behandeln Sie die Antwort dann wie gewünscht.

1
Parris Varney

Wahrscheinlich müssen Sie nur eine Ajax-Anfrage an Ihre Seite stellen. Und return false zu tun, tut nicht das, was Sie denken.

1
Lachezar

Sie müssen den return-Aufruf in den submit () - Aufruf einfügen.

  $('.submit').click(function() {
     $('#registerform').submit(function () {
     sendContactForm();
     return false;
    });
    //Here you can do anything after submit
}
1
Juan

Genau wie Bruce Armstrong in seiner Antwort vorgeschlagen hat. Ich würde jedoch FormData verwenden:

$(function() {
    $('form').submit(function() {
        var formData = new FormData($(this)[0]);
        $.ajax({
            type: 'POST',
            url: 'submit.php',
            data: formData,
            processData: false,
            contentType: false,
        });
        return false;
    }); 
})
1
flix

Das Design von HTTP bedeutet, dass das Erstellen einer POST mit Daten eine Seite zurückgibt. Die ursprünglichen Designer haben wahrscheinlich beabsichtigt, dass dies eine "Ergebnis" -Seite Ihres POST ist.

Es ist normal, dass eine Anwendung von PHP POST auf dieselbe Seite zurückkehrt, da sie nicht nur die Anforderung POST verarbeiten kann, sondern auch eine aktualisierte Seite basierend auf dem ursprünglichen GET, jedoch mit generieren kann die neuen Informationen aus dem POST. Es gibt jedoch nichts, was Ihren Servercode davon abhält, eine völlig andere Ausgabe zu liefern. Alternativ können Sie POST auf eine völlig andere Seite setzen. 

Wenn Sie die Ausgabe nicht wünschen, war eine Methode, die ich vor AJAX gesehen habe, darin, dass der Server einen HTTP-Antwortcode von (glaube ich) 250 zurückgibt. Dies wird als "No Content" bezeichnet Der Browser sollte die Daten ignorieren.

Die dritte Methode besteht natürlich darin, stattdessen mit den übermittelten Daten einen AJAX - Aufruf durchzuführen.

1
staticsan