Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [advajax] problem z assign()
qbejs
post
Post #1





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 9.02.2006

Ostrzeżenie: (0%)
-----


Siema exclamation.gif

Mam do Was pytanie, tworze skrypt ma w sobie formularz ( metoda post ) ktory za pomocą assign() odwoluje się do pliku ktory generuje kolejny formularz w ktory znow za pomocą assign() ma wykonać pewne operacje i dodać pewne dane do bazy mysql....mniej więcej wygląda to tak: formularz przesłanie danych za pomocą assign() -> wygenerowanie kolejnego formularza znow przeslanie danych assign() -> dodanie danych bo bazy mysql... Problem pojawia w drugim formularzu, mianowicie mam dodaną tam funkcje wykorzystującą assign po zakończeniu kodu php, jednak nic sie nie dzieje....klikam na wysłanie danych a mnie przeladowuje strone bez zadnego rezultatu a jak patrze w zrodlo kodu to nie ma sladu po funkcji w js...
Go to the top of the page
+Quote Post
kossa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Podaj fragment kodu, może wtedy ktoś Tobie pomoże bo nikt na forum nie jest jasnowidzem aby domyślać się co zrobiłeś źle lub gdzie jest błąd w Twoim kodzie.

Łukasz


--------------------
Go to the top of the page
+Quote Post
qbejs
post
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 9.02.2006

Ostrzeżenie: (0%)
-----


  1. <script type="text/javascript" language="JavaScript" src="advajax.js"></script>
  2. </head>
  3.  
  4. <table align="center">
  5. <tr><td>
  6. <table width="474" height="59" border="0" cellpadding="1" cellspacing="8" align="center">
  7. <tr>
  8. <td colspan=4 bgcolor="#CCCCCC"><div align="center">Wybierz date imprezy oraz klase startową </div></td>
  9. </tr>
  10. <tr>
  11. <td width="474" colspan=4 bgcolor="#CCCCCC">
  12. <center><form id="gen_table" method="post" action="add_points.php"><select name="data" id="data">
  13. <option value="15.04.2007">15.04.2007</option>
  14. <option value="20.05.2007">20.05.2007</option>
  15. <option value="17.06.2007">17.06.2007</option>
  16. <option value="21/22.07.2007">21/22.07.2007</option>
  17. <option value="26.08.2007">26.08.2007</option>
  18. <option value="30.09.2007">30.09.2007</option>
  19. </select>
  20. <select name="klasa" id="klasa">
  21. <option value="junior">junior</option>
  22. <option value="mini">mini </option>
  23. <option value="mini+">mini+</option>
  24. <option value="profi">profi</option>
  25. <option value="turbo">turbo</option>
  26. <option value="diesel">diesel</option>
  27. <option value="turbo+">turbo+</option>
  28. <option value="maxi">maxi</option>
  29. <option value="maxi+">maxi+</option>
  30. <option value="outlaw">outlaw</option>
  31. </select>
  32. <input type="submit" value="Wybierz" /></form></center> </td>
  33. </tr>
  34. </table>
  35.  
  36. <div id="wynik"></div>
  37.  
  38.  
  39. <script type="text/javascript">
  40.  
  41. advAJAX.assign( document.getElementById("gen_table"), {
  42. onLoading : function(obj){
  43. document.getElementById("wynik").innerHTML = '<center><b>Ładowanie danych...</b></center><center><img src="ajax-loader.gif"></center>';
  44. },
  45. onSuccess : function(obj) {
  46. document.getElementById("wynik").innerHTML = obj.responseText;
  47. },
  48. onError: function(obj) {
  49. document.getElementById("wynik").innerHTML = 'Error';
  50. }
  51. });
  52.  
  53.  
  54. advAJAX.assign( document.getElementById("modify_points"), {
  55. onLoading : function(obj){
  56. document.getElementById("wynik").innerHTML = '<center><b>Ładowanie danych...</b></center><center><img src="ajax-loader.gif"></center>';
  57. },
  58. onSuccess : function(obj) {
  59. alert("Dane zostały załadowane");
  60. }
  61. });
  62.  
  63. </td></tr></table>
  64.  
  65. </body>
  66. </html>


Tutaj za pomocą gen_table plik php tworzy mi formularz (modify_points) w ktorym wpisuje dane i chce je przesłać dalej jednak nastepuje przeladowanie w tradycyjny sposob.
Wygląda to tak : wybieram date ( form gen_table )-> zostaje wygenerowany formularz ( modify_points ) w ktorym wpisuje dane --(tu wystepuje blad, nie dziala assign z modify_points)--> przeslanie danych do skryptu z zapytaniem mysql
Go to the top of the page
+Quote Post
yaro
post
Post #4





Grupa: Zarejestrowani
Postów: 160
Pomógł: 4
Dołączył: 22.04.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


proponuje Ci żebyś ikrył ten drugi formularz, a po wybraniu z pierwszego selecta uaktywniasz (pokazujesz) ten ukryty formularz.


--------------------
Go to the top of the page
+Quote Post
qbejs
post
Post #5





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 9.02.2006

Ostrzeżenie: (0%)
-----


Cytat(yaro @ 23.03.2007, 20:10:02 ) *
proponuje Ci żebyś ikrył ten drugi formularz, a po wybraniu z pierwszego selecta uaktywniasz (pokazujesz) ten ukryty formularz.


Możesz ciupke jaśniej, w tematyce js i ajax jestem początkujący...Poza tym jeżeli dobrze rozumiem to jak mogę ukryć drugi formularz gdyż plik php który obsługuje pierwszy formularz generuje własnie drugi....Całość wygląda tak że ten formularz z pliku html zacytowanego tu przezemnie w zależnośći od wybranej daty i klasy generuje formularz z rekordami odpowiednimi dla wybranych danych a zatem nie mogę ukryć czegoś co jest generowane dynamicznie. Sprawa dla mnie jest o tyle dziwna że skoro w pliku html zamieściłem metody assign() dla zarówno pierwszego jak i drugiego formularza to dlaczego to nie działa ( skoro w divie sie generuje formularz o odpowiednim id zawartym w stworzonych metodach assign() ).

Ten post edytował qbejs 23.03.2007, 23:30:22
Go to the top of the page
+Quote Post
yaro
post
Post #6





Grupa: Zarejestrowani
Postów: 160
Pomógł: 4
Dołączył: 22.04.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


OK, już lepiej rozumiem o co Ci chodzi.

Twój problem wynika z tego że advAJAX.assign jest wywoływana przy ładowaniu strony. Funkcja cały czas czuwa nad podanym elementem, tylko że ona na początku go nie ma. Poprostu nie ma takiego formularza więc 'przestaje działać'. A to że tak jest zrobione, to i bardzo dobrze.

Wyjściem z tego jest wsadzenie tego drugiego advAJAX.assign do funkcji a potem dadanie wywołania tej funkcji, jeśli zostały poprawnie pobrane dane (onSuccess)


--------------------
Go to the top of the page
+Quote Post
qbejs
post
Post #7





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 9.02.2006

Ostrzeżenie: (0%)
-----


Cytat(yaro @ 24.03.2007, 12:29:12 ) *
OK, już lepiej rozumiem o co Ci chodzi.

Twój problem wynika z tego że advAJAX.assign jest wywoływana przy ładowaniu strony. Funkcja cały czas czuwa nad podanym elementem, tylko że ona na początku go nie ma. Poprostu nie ma takiego formularza więc 'przestaje działać'. A to że tak jest zrobione, to i bardzo dobrze.

Wyjściem z tego jest wsadzenie tego drugiego advAJAX.assign do funkcji a potem dadanie wywołania tej funkcji, jeśli zostały poprawnie pobrane dane (onSuccess)



Ok, już działa i faktycznie to wydaje się logiczne no ale człowiek uczy się na błędach smile.gif Mam jeszcze jedno pytanie, jak zrobić aby w przy tej drugiej metodzie assign("modify_points") przy onSuccess oprocz wyświetlnia komunikatu o wykonaniu polecenia został także wyświetlony formularz generowany przez metode assign("gen_table")
Go to the top of the page
+Quote Post
yaro
post
Post #8





Grupa: Zarejestrowani
Postów: 160
Pomógł: 4
Dołączył: 22.04.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


w drugim assignie zmień w onSuccess: document.getElementById("wynik").innerHTML

document.getElementById(tu jakiś inny div).innerHTML

dane ładuj do innego diva albo zrób coś takeigo:
document.getElementById("wynik").innerHTML += 'bleble';


--------------------
Go to the top of the page
+Quote Post
qbejs
post
Post #9





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 9.02.2006

Ostrzeżenie: (0%)
-----


Cytat(yaro @ 24.03.2007, 19:39:17 ) *
w drugim assignie zmień w onSuccess: document.getElementById("wynik").innerHTML

document.getElementById(tu jakiś inny div).innerHTML

dane ładuj do innego diva albo zrób coś takeigo:
document.getElementById("wynik").innerHTML += 'bleble';


Ok, dzieki wielkie za pomoc smile.gif Mam już ( hehe tak mi się wydaje smile.gif ) ostatnie pytanie, mianowicie co jest przyczyną że jak juz pierwszy assign wygeneruje mi form to potem gdy chce np. zmienic wybrane dane to juz nie dziala i przetwarza formularz w tradycyjny sposob.

//EDIT: Problem rozwiązany wystarczyło zmienic z assign na submit smile.gif

A jednak mam pytanie, chce aby dana strona po wygenerowaniu przez formularz odświezala sie co np. 5 sekund...stworzylem taki oto kod jednak coś jest nie tak...

  1. <script type="text/javascript" language="javascript">
  2.  
  3. advAJAX.assign( document.getElementById("gen_results"), {
  4. onLoading : function(obj) {
  5. document.getElementById("wynik").innerHTML = '<center><b>Ladowanie danych...</b></center><center><img src="ajax-loader.gif"> </center>';
  6. },
  7. onSuccess : function(obj) {
  8.  
  9. document.getElementById("wynik").innerHTML = obj.responseText;
  10.  
  11. document.getElementById("wynik").innerHTML = self.setInterval(odswiez();,5000);
  12. },
  13. onError: function(obj) {
  14.  
  15. document.getElementById("wynik").innerHTML = 'Error';
  16. }
  17. });
  18.  
  19. function odswiez() {
  20. advAJAX.get({
  21. url: "gen_results.php",
  22. onSuccess : function(obj) { document.getElementById("wynik").innerHTML = obj.responseText); }
  23. }); }
  24.  
  25.  


Ten post edytował qbejs 24.03.2007, 23:58:40
Go to the top of the page
+Quote Post
yaro
post
Post #10





Grupa: Zarejestrowani
Postów: 160
Pomógł: 4
Dołączył: 22.04.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


document.getElementById("wynik").innerHTML = self.setInterval(odswiez();,5000); questionmark.gif?

po pierwsze nie przypisuj setInterval do czego kolwiek, bo nie ma po co
a po drugie użyj samo set interval bez tego self
a po trzecie zakończyłeś linie (bo tak to interpretuje parser) po odświez()
po czwarte wystarczy jak zapiszesz setInterval(odswiez, 5000);

Ten post edytował yaro 26.03.2007, 18:35:50


--------------------
Go to the top of the page
+Quote Post
SDK
post
Post #11





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 6.04.2008

Ostrzeżenie: (0%)
-----


Podpinam się pod ten temat bo mój problem jest podobny, a jednak nieco inny.

Zrobione mam tak: pierwsze wywołanie jest następujące :

Kod
function product_gallery (id) {
     advAJAX.get
     ({
         url : "system/ajax.php",
         parameters : { "ajax_product_gallery" : id },
         onSuccess : function(obj) { document.getElementById("product_gallery").innerHTML = obj.responseText; }
     });
}


Zwraca ona galerię produktu o określonym id. Wszystko działa poprawnie. W ajax.php wykorzystuje XTemplate (http://www.phpxtemplate.org) a zawartość samego template obecnie jest następująca:

Kod
<!-- BEGIN: product_gallery -->
        
         <h3>Galeria produktu</h3>
        
         <!-- BEGIN: images -->
            
             <div class="margin-top-15">
             <img src="{OBRAZEK}" width="150" /> {ID}.{ROZSZERZ} | {DODANO} | {OPIS} | {WEJSC} test
             </div>
            
         <!-- END: images -->
        
         <!-- BEGIN: noimages -->
            
             Dla tego produktu, nie dodano jeszcze fotografii.
            
         <!-- END: noimages -->
        
         <div class="margin-top-15"></div>
         <h3>Dodaj obrazek</h3>
        
         <div id="wynik">
        
         <form id="add_photo" enctype="multipart/form-data" action="dupa.php" method="post">
         <input type="hidden" name="MAX_FILE_SIZE" value="500000" />
         <input type="file" name="obrazek" />
         <input type="submit" value="dodaj" />
         </form>
        
         <script type="text/javascript" language="javascript">
             function add_photo()
             {
                 advAJAX.assign
                 ( document.getElementById("add_photo"),
                 {
                     onLoading : function(obj){
                     document.getElementById("wynik").innerHTML = '<div class=center><b>Ładowanie danych...</b><br/><img src="skins/{PHP.skin}/img/icons/ajax-loader.gif"></div>';
                     },
                     onSuccess : function(obj) {
                     document.getElementById("wynik").innerHTML = obj.responseText;
                     },
                     onError: function(obj) {
                     document.getElementById("wynik").innerHTML = 'Error';
                     }
                 }
                 );
             }
             add_photo();
         </script>
        
         </div>
        
     <!-- END: product_gallery -->


Niestety formularz leci normalnie do action, pomijany jest ajax. Jeżeli natomiast adv.assing dam w poprzednim XTemplate w pliku w którym wywoływana jest metoda advAjax.get, działa poprawnie, ale rozwiązanie mnie nie satysfakcjonuje, chce aby kod odpowiedzialny za dodawanie był w dobrym miejscu, a nie w innym tpl'u, w którym jest zbędny ( ale dziala jeśli w adv.get() onSucc dodam add_photo(); ). Pomyślałem, że może to zadziała, gdy po załadowaniu zainicjowanej metody, którą dam w funkcję wywołam tą funkcję, ale też nic to nie dało.

Może ktoś ma jakiś pomysł ? Pozdrawiam i z góry dziękuję za każdą pomoc.


--------------------
Aplikacje mobilne iPhone i iPad: http://generio.pl / http://facebook.com/GenerioPL
Portfolio: http://poslinski.net
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 04:38