Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]Przesylanie formularza ajaxem
Forum PHP.pl > Forum > PHP > Frameworki
johnyMajster
Witam
Czy w zend jest jakies narzedzie do przesyłania formularza ajaxem?questionmark.gif

Aktualnie pobieram pewną wartosc z formularza za pomoca jquery i wysyłam to ajax() niestety wtedy o filtrach mozna zapomniec
pozdrawiam
melkorm
Wysyłasz normalnie dane z formularza i obsługujesz to tak samo jak normalne formy w Zend'dzie, nie widzę żadnego problemu.
johnyMajster
No niby tak ale jak klikam submit to zawsze mi sie cała strona odswieza. Wiec zastąpiłem go buttonem i onclick pobieram val() z pola.

ShadowD
O ile się nie mylę nasz kolega z forum - Nietoperz (?) popełnił wpis na ten temat - http://blog.wilgucki.pl/2010/06/zend-frame...jaxcontext.html

Tam masz wszytko co jest potrzebne do obsługi ajax'a, przeczytaj całość! ;-)
amii
Ja się ostatnio bawiłem w formularze przesyłane ajaxem, więc sypne praktycznie gotowcem:

1. W kontrolerze gdzie kierujesz żądania ajax ustawiasz odpowiedni kontekst i zaszywasz dla wygody zmienną globalną JS do której będą kierowane żądania ajax:
  1. public function init()
  2. {
  3. $ajaxContext = $this->_helper->getHelper('AjaxContext');
  4. $ajaxContext->addActionContext('ajax-check', 'html')
  5. ->initContext();
  6.  
  7. $this->view->headScript()->appendScript(
  8. "ajaxUrl='" . $this->view->url(array(
  9. 'module' => 'default',
  10. 'controller' => 'twoj_kontroler',
  11. 'action' => 'ajax-check',
  12. 'format' => 'html'), 'default', 'false') . "'"
  13. );
  14. }


2. W tym samym kontrolerze obsługujesz żądania ajax w ten sposób, że do widoku zwracasz formularz, ja na formularzu wykonuje jeszcze jakieś metody zanim go przekaże do widoku. Pewnym haczykiem jest przesyłanie zmiennych (jesli potrzebujesz) ale o tym napiszę dalej.

3. W widoku tworzysz plik dla tego przykładu: ajax-check.ajax.phtml gdzie wyświetlasz formularz

4. JS
a) Ustawiasz obsługę zdarzenia: $('#id_twoj').change(ajax_check); tutaj procedura przesylania formularza jest doczepiona to pola selekt o id_twoj
cool.gif Funkcja do obsługi ajaxa. Tutaj przykładowe wartości są pobierane z pola selekt i id z adresu url.
[JAVASCRIPT] pobierz, plaintext
  1. function ajax_check() {
  2.  
  3. global_id = getParameterByName(window.location.href);
  4.  
  5. $.ajax({
  6. type: 'POST',
  7. url: ajaxUrl,
  8. data: this.name + '=' + this.value + '&id=' + global_id,
  9. success: ajaxSuccess,
  10. context: this
  11. });
  12. }
  13.  
  14. //nie konieczne do pobrania parametru id dla ajaxa z adresu url
  15. function getParameterByName(name)
  16. {
  17. return name.match(/\d+$/);
  18. }
[JAVASCRIPT] pobierz, plaintext

3. Funkcja obsługująca ajaxa po zwróceniu danych:
[JAVASCRIPT] pobierz, plaintext
  1. function ajaxSuccess(data){
  2. $('#formularz_select').children().remove(); //usuwamy to co bylo wczesniej w formularzu
  3. $('#formularz_select').append(data); //i doklejamy to co zwrocil serwer
  4. }
[JAVASCRIPT] pobierz, plaintext
melkorm
Kontroler może być, ten appendScript niepotrzebny moim zdaniem, a poniżej bardziej uniwersalna wersja żądania via jQuery.

W action dajemy normalnie url, lub ustawiamy w obiekcie Zend_Form.
[JAVASCRIPT] pobierz, plaintext
  1. var form = $('form'); // obiekt formularza
  2. var data = form.serialize();
  3. var xhr = $.ajax({
  4. url : form.attr('action'),
  5. data : data,
  6. dataType : (form.attr('data-type') || 'json'), // tutaj możemy zaminieć na html lub ustawić w obiekcie formularza atrybut data-type
  7. type :(form.attr('method') || 'GET')
  8. });
  9. xhr.always(function(response){
  10. // obsługa odpowiedzi z serwera
  11. });
[JAVASCRIPT] pobierz, plaintext
johnyMajster
dzieki Panowie o to chodziło smile.gif
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.