Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP+Ajax]Przeładowanie strony + JSON
Forum PHP.pl > Forum > XML, AJAX
wizarts

W dużym skrócie chodzi o to:


1.klient.php wysyła post do klient_add.php
2.klient_add.php robi co ma zrobić i wysyła obiekt json do klient.php ( errorCode, errorMsg, klient_id)
3.klient.php sprawdza wartość errorCode i dla wartości 1 wyświetla drugi formularz z danymi adresowymi, dla innych wartości pokazuje alert(errorMsg)

poniżej szczegółowy opis zagadnienia :-)

Są 2 pliki:
klient.php i klient_add.php

W pierwszym znajdują się 2 formularze i funkcja java script:

  1. $.ajax({
  2. type: "POST",url: "klient_add.php",
  3. data: data,
  4. datatype: 'json',
  5. success: function(jsonRet){
  6. if($.trim(jsonRet['errorCode'])==1){
  7. alert("Klient został prawidłowo dodany do bazy danych.");
  8. }
  9. else
  10. {
  11. alert("Wystąpił błąd podczas zmiany danych klienta: " + jsonRet['errorMsg']);
  12. }
  13. }
  14. });
  15. }


W zmiennej data znajduje się przygotowany ciąg do przesłania do pliku klient_add.php.
Zresztą nie w tym rzecz. Klient dodaje się prawidłowo, więc w tę stronę komunikacja działa bez zarzutu.

Problem polega na tym, że chciałbym aby ajax po zakończeniu działania skryptu na stronie klient_add.php odświeżył plik klient.php przesyłając do niego metodą POST identyfikator nowo dodanego klienta.
Wartość mam zwróconą z procedury do pliku klient_add.php i teraz jak najlepiej, o ile wogóle da się to zrobić:

1. "Zatwierdzić" formularz na stronie klient_add.php
  1. <form id="clientAddForm" style="display:none" method="post" target="klient.php">
  2. <input type="hidden" name="klient_id" value="<?php echo $klient_id ?>" />
  3. </form>


2.Przekazać spowrotem do ajaxa jakąś sensowną zmienną, żeby poinformować funkcję o statusie działania skryptu na stronie klient_add.php

Powrót wartości mam w zasadzia załatwiony JSON'em (dopóki na stronie klient_add.php nie ma formularza clientAddForm),
ale formularz się nie "zatwierdza", bo strona się nie odświeża.

Po co ta cała łamigłówka ?

Na stronie klient.php są 2 formularze. Pierwszy wyświetlony zawsze służy do edycji/wyświetlania danych klienta.
Drugi jest ukryty, ( jeśli strona została wywołana bez wartości $klient_id ) i służy do dodania danych adresowych klienta ( struktura w bazie danych tabela klient i tabela adres ).
Pod pierwszym formularzem jest przycisk zapisz. Użytkownik wciska zapisz dane klienta dodają się do bazy i pokazuje mu się drugi formularz do wprowadzenia danych adresowych.

Oczywiście można to zrobić inaczej.
Pokazać oba formularze, dać przycisk na końcu i w procedurze w bazie danych najpierw dodać dane klienta, zapamiętać identyfikator dodanego rekordu i następnie dodać dane adresowe.
Tylko chciałbym aby użytkownik nie musiał za każdym razem przewijać formularza do końca, żeby kliknąc zapisz. Tylko, żeby pod każdą sekcją danych był taki przycisk.
tolomei
Witaj.

Z tego co widzę i co napisałeś, klient_add.php zwraca Ci id nowo dodanego klienta w JSON-ie. W funkcji success możesz jej użyć w ten sposób jsonRet.klient_id. Zapewne doskonale to wiesz, ale piszę, żeby było jasne.

Następnie chciałbyś pokazać drugi formularz z dodawaniem adresu. Aby to zrobić, w funkcji success musisz znaleźć ten formularz i wyświetlić go (możesz użyć metody jQuery .show() ) oraz ustawić wartość odpowiedniego inputa (metoda .val() ) na id nowo dodanego klienta(tak, żeby przy zapisaniu adresu to id szło razem z danymi dotyczącymi adresu).

Nie wiem czy to rozjaśnia Ci sytuację wystarczająco dobrze. Jak coś to jeszcze pytaj.

Pozdrawiam.
wizarts
Chyba poprostu oczekiwałem za dużo magii :-)
Chciałem, żeby javascript zrobił coś co robi php i jeszcze bez "mrugnięcia" przeładował stronę.

Wyświetlenie formularza załatwiłem sobie tak:
  1. $("#clientAdressForm").fadeIn(500);


I dodałem jeszcze taki efekt z przewnięciem strony na dół

  1. $("html, body").animate({ scrollTop:1000 }, 700);


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.