Mam prosty formularz z remote = true.
Ten formularz znajduje się w oknie dialogowym HTML, które zostaje zamknięte po kliknięciu przycisku Prześlij.
Teraz muszę wprowadzić pewne zmiany na głównej stronie HTML po pomyślnym przesłaniu formularza.
Próbowałem tego za pomocą jQuery. Ale to nie gwarantuje, że zadania zostaną wykonane po jakiejś formie odpowiedzi z przesłania formularza.
$("#myform").submit(function(event) {
// do the task here ..
});
Jak mam dołączyć callback, żeby mój kod był wykonywany dopiero po pomyślnym przesłaniu formularza? Czy istnieje sposób, aby dodać do formularza jakieś wywołanie zwrotne .success lub .complete?
Odpowiedzi:
Właśnie to zrobiłem -
I wszystko działało idealnie.
Więcej szczegółowych informacji można znaleźć w tej dokumentacji interfejsu API .
źródło
<form>
przesyłane jest zwykle? (To znaczy nie z Ajaxem) Co mogę umieścić w pierwszym argumencie.bind()
? EDYCJA: cóż, tak myślęclick
. Nvm, przepraszam. : pNie udało mi się sprawić, aby rozwiązanie numer jeden, które uzyskało poparcie, działało niezawodnie, ale okazało się, że działa. Nie jestem pewien, czy jest to wymagane, czy nie, ale nie mam atrybutu akcji ani metody w tagu, co zapewnia, że POST jest obsługiwany przez funkcję $ .ajax i daje opcję wywołania zwrotnego.
źródło
$(this).serialize()
linia. PozwalajQuery.ajax()
przesłać istniejący formularz w tle, a następnie przechwycić odpowiedź z serwera i coś z tym zrobić..serialize
nie obejmuje danych wejściowych pliku w żądaniu POST. Zamiast tego użyj HTML5 FormData (zobacz to pytanie ), chyba że obsługujesz stare przeglądarki, takie jak IE <9$(this).serialize()
, to rozwiązało moje problemy!Będziesz musiał robić rzeczy ręcznie z wywołaniem AJAX do serwera. Będzie to również wymagało zastąpienia formularza.
Ale nie martw się, to bułka z masłem. Oto przegląd tego, jak będziesz pracować z formularzem:
preventDefault
metodę)Najpierw musisz anulować akcję przesyłania formularza w następujący sposób:
A następnie pobierz wartość danych. Załóżmy, że masz jedno pole tekstowe.
A potem wystrzel prośbę. Załóżmy tylko, że jest to żądanie POST.
I to powinno wystarczyć.
Uwaga 2: do analizowania danych z formularza najlepiej jest użyć wtyczki . Ułatwi ci to życie, a także zapewni przyjemną semantyczną, która naśladuje rzeczywistą akcję składania formularza.
Uwaga 2: nie musisz używać odroczenia. To tylko osobiste preferencje. Możesz również wykonać następujące czynności i to też powinno działać.
źródło
Dla MVC było to jeszcze łatwiejsze podejście. Musisz użyć formularza Ajax i ustawić AjaxOptions
tutaj jest kod przesyłania, znajduje się on w sekcji gotowej do dokumentu i wiąże zdarzenie onclick przycisku, aby przesłać formularz
tutaj jest wywołanie zwrotne, do którego odwołuje się AjaxOptions
w metodzie kontrolera dla MVC wygląda to tak
źródło
Nie wierzę, że istnieje funkcja zwrotna, taka jak ta, którą opisujesz.
To, co jest tutaj normalne, to dokonywanie zmian za pomocą języka po stronie serwera, takiego jak PHP.
W PHP możesz na przykład pobrać z formularza ukryte pole i dokonać pewnych zmian, jeśli jest obecne.
PHP:
Jednym ze sposobów rozwiązania tego problemu w Jquery jest użycie Ajax. Możesz słuchać przesyłania, zwracać false, aby anulować domyślne zachowanie i zamiast tego użyć jQuery.post (). jQuery.post ma udane wywołanie zwrotne.
http://api.jquery.com/jQuery.post/
źródło
Procedury obsługi formularza „przy przesyłaniu” są wywoływane przed przesłaniem formularza. Nie wiem, czy istnieje procedura obsługi, która ma zostać wywołana po przesłaniu formularza. W tradycyjnym sensie innym niż JavaScript przesłanie formularza spowoduje ponowne załadowanie strony.
źródło
źródło
ajaxForm()
zainstalowałeś komponent innej firmy? Nie jest to standardowa część jQuery.