Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [advAjax] Ajax w Ajax'ie - problem
Forum PHP.pl > Forum > XML, AJAX > AJAX
marcz
Witam!

Piszę stronę, która ma wykorzystywać Ajax'a, wygląda ona mniej więcej tak:
- każdy link w menu strony wykorzystuje advAJAX.get(), aby do głównego div'a załadować odpowiedni plik php
- następnie w jednym z ładowanych plików php (w jedym z działów strony) chcę wykorzystać advAJAX.assign(), aby móc obsługiwać formularze za pomocą AJAXa (np. takie logowanie jak na stronie Anakina w przykładach)

Problem jest taki, że o ile pierwszy stopień zagłębienia Ajax'a działa (ładowanie działów klikając w linki menu), o tyle drugi stopień zagłębienia (formularz) już nie działa - dokładniej - przeglądarka jest przekierowywana do pliku z parametru action formularza, czyli tak jakby AJAX'a tam w ogóle nie było.

Oczywiście w przypadku nie ładowania formularza poprzez AJAX'a a wyświetlanie go "normalnie" wszystko działa jak należy - AJAX obsługuje formularz.

Nie mam pojęcia co jest nie tak, proszę o pomoc...

Udało mi się bardziej sprecyzować problem - funkcja adjAVAX.assign() podpinana pod dany formularz nie widzi go - document.getElementById() zwraca null. Specjalnie wywołuję assign() tuż po załadowaniu formularza, ale to i tak nic nie daje. Jak sobie z tym poradzić?
yaro
Z tego co mi sie wydaje to assign() powinienieś wywoływać przy ładowaniu strony
Skobi
ja robie coś takiego:

  1. var arrElement = new Array();
  2.  
  3. function ajaxform( nameID, submitvalue, ResponseId )
  4. {
  5. if ( document.getElementById(nameID).SUBMIT != "undefined" )
  6. {
  7. document.getElementById(nameID).SUBMIT.value = submitvalue;
  8. }
  9.  
  10. if( ResponseId == undefined )
  11. {
  12. ResponseId = 'contentAJAX';
  13. }
  14.  
  15. if ( arrElement[nameID] != 1 )
  16. {
  17. advAJAX.assign(document.getElementById(nameID), {
  18. onLoading : function() {
  19. contentHTML = document.getElementById( ResponseId ).innerHTML;
  20. document.getElementById( ResponseId ).innerHTML = document.getElementById( 'loadtemplate2' ).innerHTML;
  21. },
  22. onSuccess : function(obj) {
  23. document.getElementById( ResponseId ).innerHTML = obj.responseText;
  24. },
  25. onError : function(obj) {
  26. document.getElementById( ResponseId ).innerHTML = contentHTML;
  27. window.alert('blad');
  28. }
  29. });
  30. }
  31.  
  32. if (document.getElementById(nameID) != "null" )
  33. {
  34. arrElement[nameID] = 1;
  35. }
  36.  
  37. return false;
  38. }




a jezeli chodzi o przygotowanie formularza wyglada to tak:

  1. <? $sid = md5( uniqid( rand(), true ) ); ?>
  2. <form method="post" action="indexAjax.php" id="<?=$sid?>">
  3. <input type="hidden" name="act" value="post">
  4. <input type="hidden" name="SUBMIT" value="">
  5. <input type="submit" name="zapisz" value="Zapisz" onClick="ajaxform( '<?=$sid?>', 'ZAPISZ' );"/>
  6. </form>



u mnie takie coś działa bez problemu
marcz
Skobi - nie bardzo rozumiem kod, który napisałeś, chyba źle się zrozumieliśmy i chodzi nam o co innego.

Mój problem polega na tym, że jeżeli za pomocą AJAX'a zmienię zawartość jakiegoś div'a tak, że wstawie do niego formularz, to potem nie mogę się do niego dostać wykorzystując document.getElementById(id_formularza), a co za tym idzie - nie mam co podać do wywołania advAJAX.assign().

Inaczej mówiąc, przeglądarka wyświetla całość, ale widzi tylko to co zostało załadowane bez AJAX'a, a to co zostało załadowane AJAX'em jest poza jej zasięgiem i nie można się do tego dostać poprzez document.getElementById().

Cytat(yaro @ 7.07.2006, 13:06 ) *
Z tego co mi sie wydaje to assign() powinienieś wywoływać przy ładowaniu strony


yaro, co rozumiesz poprzez "przy ładowaniu strony"? wywoływanie assign() na początku ładowania strony nic nie daje, gdyż wtedy jeszcze nie ma tego formularza - jest on ładowany AJAX'em dopiero gdy użytkownik kliknie w odpowiedni link w menu.
Skobi
to jak u mnie działa umiesciłem na serwerze:
http://www.skora.nazwa.pl/ajax/

własnie zrobiłem tak zeby po zaladowaniu formularza przez Ajaxa mozna
było wyswietlic zawartosc elementu ktoremu nadałem ID, do tego mozesz
sciagnac caly przykład.

Mam nadzieje, że pomogłem, jeżeli nie oto chodziło napisz kod ktory Ci nie dziala.
marcz
Dokładnie o to mi chodziło smile.gif. Wielkie dzięki!
Jak tylko znów usiądę do komputera, przeanalizuje ten kod.
Jeszcze raz serdecznie dziękuję, jeżeli będę miał jakieś pytania odnośnie tego, będę pytał 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.