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;
}
}
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?obiekt.Success = function() { ... }
Kod
nazwa = new NewReq()
//W funkcji NewReq
this.http=new XMLHttpRequest();
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.