Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Co zrobić z wynikiem?
Forum PHP.pl > Forum > XML, AJAX > AJAX
WebCM
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(...);
obiekt.Success = function() { ... }
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?
Kod
nazwa = new NewReq()

//W funkcji NewReq
this.http=new XMLHttpRequest();
Czy coś w tym stylu zapobiegnie konfliktom?

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.
mike
Cytat(WebCM @ 12.01.2007, 18:39:26 ) *
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
WebCM
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. sad.gif

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)
{
   Jakas_tam_funkcja()
}
Albo trzeba przekazać skryptowi kod (tu też pewnie będą problemy), albo nazwy odpowiednich funkcji.
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.