Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podwójny submit
Forum PHP.pl > Forum > XML, AJAX
vefeer
Witam,

Czy jest możliwy podwójny submit - taki, że po kliknięciu na submit formularz poprzez AJAX dodaje zamówienie do bazy mysql, po czym skrypt dodawania (PHP) metodą PDO::lastinsertid zwraca wartość ID, a następnie AJAX czy JQuery umieszcza ją w jednym z ukrytych pól input submitowanego formularza? Inaczej - przed przejściem submitowanego formularza do płatności (skrypt zewnętrzny) muszę utworzyć w bazie rekord nowego zamówienia i zwrócić do formularza (tego submitowanego) ID nowego rekordu, aby płatność była kojarzona z danym zamówieniem.

Dziękuję za pomoc
vokiel
Tak, ale akcje formularza musisz przekazać do javascript oraz zablokować domyślną akcję wysłania formularza.
Schemat postępowania
1. Na zdarzenie onclick przycisku submit wywołujesz funkcję, która:
2. Zablokuje wysłanie formularza
3. Wyśle zapytanie postem do skryptu php
4. Skrypt php dodaje co ma dodać, zwraca (jako json, albo zwykłe echo id ostatniego rekordu)
5. Funkcja w js, ta, która wysyłała formularz odbiera odpowiedź skryptu php
6. Jeśli jest błędna to nie wysyła formularza dalej
7. Jeśli jest poprawna, to wysyła zapytanie postem dalej, do tego skryptu płatności

Do formularzy możesz użyć pluginu, np: jQuery Form Plugin
vefeer
Hej, dzięki za pomoc. Po wysłaniu formularza poprzez ajaxSubmit i otrzymaniu ID (jako response), nie potrafię ponownie submitować formularza. Użyłem jquery form plugin. Aby form wysłał się ajaxem, należy zwrócić false. Po tym już z formularzem nic nie mogę zrobić. Proszę o pomoc. Dzięki
vokiel
Masz tam taką opcję success, do której możesz przypisać funkcję, która wykona się po poprawnym odebraniu danych. Możesz wtedy dodać nowe pole, i zrobić ponownie ajaxSubmit tyle, że na inny adres. Bądź już normalnie zezwolić na wysłanie formularza.
vefeer
Ale w jaki sposób mogę ponownie zezwolić na wysyłanie formularza w funkcji success? Próbuję to zrobić, ale niestety się nie udaje.
  1. function Response(responseText, statusText) {
  2. $('input[@name=tescik]').val(responseText);
  3. $("#test").submit();
  4. }
vokiel
[JAVASCRIPT] pobierz, plaintext
  1. function Response(responseText, statusText) {
  2. $('input[@name=tescik]').val(responseText);
  3. $("#test").ajaxSubmit();
  4. }
[JAVASCRIPT] pobierz, plaintext
A tak nie zadziała? Teraz tylko inne parametry dla ajaxSubmit i myślę, że powinno zadziałać.
vefeer
Ale ja muszę tam przejść do tych płatności, a ajaxem zrobię to w tle...
vokiel
A jak zrobisz return true; przy pierwszym ajaxSubmit?
Albo po prostu:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. $('#submit').click(function(){
  3. $.ajax({
  4. /* całe zapytanie itd */
  5. success: function(){
  6. $('input[@name=tescik]').val(responseText);
  7. return true;
  8. }
  9. });
  10. });
  11. });
[JAVASCRIPT] pobierz, plaintext


Tylko nie wiem, czy się nie wyśle ten formularz zanim ajax nie zwróci wyników.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.