![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Przy pomocy artykułu na stronie Mozilli utworzyłem prosty skrypt do obsługi AJAX (być może są błędy - dopiero go piszę).
CODE //AJAX function NewReq(type,url,co,errmsg) { http=false; if(window.XMLHttpRequest) { http=new XMLHttpRequest(); if(http.overrideMimeType) http.overrideMimeType('text/xml'); } //IE else if(window.ActiveXObject) { http=new ActiveXObject("Microsoft.XMLHTTP"); } if(!http) return false; if(type=='POST') http.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); http.onreadystatechange=Answer; http.open(type,url,true); http.send(co); } function Answer() { try { if(http.readyState==4) { if(http.status==200) { alert(http.responseText); } else { if(errmsg!=0) alert(errmsg); return false; } } } catch(e) { alert('Error: '+e.description); return false; } } Pozostało teraz dodać obsługę funkcji skryptów. Metody są różne. Jedną z nich jest możliwość przesłania kodu do funkcji (odpowiednik w php: eval) LUB nazwy funkcji jako argument NewReq. Rozwiązanie ma zalety (np. nie trzeba tworzyć wielu funkcji) jak i wady (dużo argumentów, itp.). W JavaScript jest to prawdopodobnie niemożliwe. Chyba najlepszym rozwiązaniem jest utworzenie obiektu AJAX dla danego skryptu. Przykład (nie wiem, czy poprawny): Kod obiekt = new NewReq(...); Jednak jeśli będzie korzystać z AJAX w tym samym czasie więcej modułów, prawdopodobnie się pogryzą. Możliwe jest więc przekazanie nazwy zmiennej obiektu (zamiast domyślnego http (który użyłem)) np. w argumencie NewReq()? Może jest lepsze rozwiązanie?obiekt.Success = function() { ... } Kod nazwa = new NewReq() Czy coś w tym stylu zapobiegnie konfliktom?//W funkcji NewReq this.http=new XMLHttpRequest(); Jak to poprawnie zrobić? Ciekawe jest też rozwiązanie, które stosuje AdvAJAX. Używa się znaku dwukropka. Chyba użyte jest słowo prototype w kodzie. W kursach nie ma o tym jednak zbyt wiele. -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ciekawe jest też rozwiązanie, które stosuje AdvAJAX. Używa się znaku dwukropka. Chyba użyte jest słowo prototype w kodzie. W kursach nie ma o tym jednak zbyt wiele. Dokumentacja języka JavaScript 1.5:Obiekty:Function:prototype |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli zadeklaruję zmienną HTTP w funkcji, nie powinny się gryźć.
Jest jednak inny problem - jak zwrócić wynik funkcji? Prawdopodobnie jest to niemożliwe. ![]() W takim razie jak przekazać, co ma się stać np. po wystąpieniu błędu, przy ładowaniu lub gdy dane zostaną pobrane? Z funkcji NewReq() może korzystać więcej skryptów w tym samym czasie, więc nie mogę napisać: Kod if(http.status==200) Albo trzeba przekazać skryptowi kod (tu też pewnie będą problemy), albo nazwy odpowiednich funkcji.
{ Jakas_tam_funkcja() } -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 22.06.2025 - 13:53 |