![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam, tworzę kilka prostych funkcji do obsługi AJAX i mam problem który wiąże się z samym JavaScriptem. Otóż chciałbym przekazać funkcję do funkcji tak aby wywoływała się w funkcji, bez sensu napisane więc wytłumaczę na przykładzie:
tworzę obiekt XHR Kod var karmian = new XMLHttpRequest(); oraz funkcję do wysłania zapytania Kod function karmian_send_get(URL, GET_STRING){ karmian.open('GET', URL+'?'+GET_STRING); karmian.onreadystatechange = karmian_receive_get; karmian.send(null); } problemem jest to że chciałbym aby fragment: Kod karmian.onreadystatechange = karmian_receive_get; był dynamiczny(?) Chcę dodać do funkcji karmian_send_get(); parametr którym będzie nazwa funkcji którą chciałbym wywoływać. coś na zasadzie: Kod function karmian_send_get(URL, GET_STRING, FUNKCJA_DO_WYWOLANIA){ karmian.open('GET', URL+'?'+GET_STRING); karmian.onreadystatechange = FUNKCJA_DO_WYWOLANIA; karmian.send(null); } analogicznie mógłbym wykonać kilka różnych wywołań tej samej funkcji: Kod karmian_send_get('http://localhost/a.php', 'a=1', wyswietl_w_div()); karmian_send_get('http://localhost/a.php', 'a=1', alert()); karmian_send_get('http://localhost/a.php', 'a=1', inna_funkcja()); Z góry dziękuję za pomoc. Pozdrawiam. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
No to samą funkcję masz już dobrze napisaną, jedynie w użyciu powinno być ....'a=1', wyświetl_w_div); (zauważ brak nawiasów po nazwie funkcji).
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
No to samą funkcję masz już dobrze napisaną, jedynie w użyciu powinno być ....'a=1', wyświetl_w_div); (zauważ brak nawiasów po nazwie funkcji). ale będę chciał też przesyłać parametry, napiszę to troszkę inaczej: Kod var karmian = new XMLHttpRequest(); function glowna(parametr_1, funkcja_do_wywolania){ karmian.open('GET', parametr_1); karmian.onReadystatechange = funkcja_do_wywolania; karmian.send(null); } function wpisz_w_div(div_id){ document.getElementById(div_id).innerHTML = 'Lorem...'; } function zmien_klase(div_id){ document.getElementById(div_id).setAttribute('class', 'red'); } wywołuje to tak: Kod glowna('http://localhost/plik.php', wpisz_w_div('div_numer_18')); glowna('http://localhost/plik.php', zmien_klase('div_numer_89')); tak miałoby to wyglądać |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ale ja nie chcę ją wywołać tylko wstawić za znakiem przypisz
tutaj: Kod karmian.onReadystatechange = funkcja_do_wywolania; W miejscu funkcja_do_wywolania chce podstawiać rozne funkcje i dopiero tutaj maja być wywołane. Rozwiązaniem byłby switch, ale gdy funkcji będzie 300, switch staje się nie czytelny i (dla mnie) bez sensu. W ogóle wydaje mi się że się nie rozumiemy. Zawsze miałem problem z opisem problemu. ![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dobrze się rozumiemy. Funkcję glowna(param1, funkcja_do_wywolania) masz już dobrze napisaną - możesz do niej podać dowolną funkcję. Teraz jeżeli byś chciał by w wyniku działania kodu wywołała się jakaś funkcja (podana przez Ciebie) z danym argumentem musisz wykonać "trik" w postaci przekazania anonimowej funkcji pozbawionej argumentów, której jedynym zadaniem będzie odpalenie docelowej funkcji z danymi argumentami - tak jak Ci to pokazałem wcześniej. Czyli ostatecznie kod funkcji glowna() nie musi się zmieniać, a przykładowe wywołanie to:
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie, wszystko działa jak należy. Wygląda nie za dobrze ale dorzucę jQuery i będzie ok.
gotowy działający kod: Kod <html> <head> <script type="text/javascript"> var karmian = new XMLHttpRequest(); function karmian_send_get(URL, GET_STRING, FUNCTION_TO_EXECUTE){ karmian.open('GET', URL+'?'+GET_STRING); karmian.onreadystatechange = FUNCTION_TO_EXECUTE; karmian.send(null); } function karmian_receive_get_1(){ if(karmian.readyState == 4){ document.getElementById('cont1').innerHTML = karmian.responseText; } } function karmian_receive_get_2(){ if(karmian.readyState == 4){ document.getElementById('cont2').innerHTML = karmian.responseText; } } </script> </head> <body> <div id="box"> <input type="button" value="test1" id="but1" onClick="karmian_send_get('http://localhost/workspace/WebService/ajax.php', 'a=133&b=test1', function(){karmian_receive_get_1();});" /> <input type="button" value="test2" id="but2" onClick="karmian_send_get('http://localhost/workspace/WebService/ajax.php', 'a=515&b=test2', function(){karmian_receive_get_2();});" /> <br /> <div id="cont1"></div> <br /> <div id="cont2"></div> </div> </body> </html> i plik php:
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 5.07.2025 - 00:16 |