/** * @author Maciek Lasyk (docent) * date 23-05-2009 * class dcAjax * klasa do obslugi zdarzen ajaksowych */ /** konstruktor - po utworzeniu obiektu klasy dcAjax mozemy ustawic kilka wlasciwosci klasy: url: pelny URL, do ktorego ma zostac wyslane zadanie params: string zawierajacy zmienne zadania w formacie urlencoded method: POST / GET - metoda wywolania zadania callback_fnc: funkcja callbackowa do wywolania po wykonaniu zadania buttons: array, zawierajacy informacje o buttonach, ktore maja zostac zablokowane w trakcie wykonywania zadania. elementami tej tablicy maja byc obiekty klasy dcAjaxButtons block_fullscreen: true jesli na czas ladowania wynikow zadania ma zostac wyswietlna pelnoekranowa informacja "prosze czekac" */ var dcAjax_http_request=false; var dcAjax_queue=new Array; var dcAjax_block_fullscreen=false; var dcAjax_processing=false; var dcAjax_buttons=false; var dcAjax_response_fnc=false; function dcAjax() { this.url=false; this.params=false; this.callback_fnc=false; this.method=false; this.buttons=false; this.http=false; this.block_fullscreen=false; } dcAjax.prototype.send_request=function() { this.url=this.url?this.url:false; this.params=this.params?this.params:false; if(!this.params){alert('Ajax error - no params defined!');return false;} if(!this.url){alert('Ajax error - no params defined!');return false;} this.method=this.method?this.method:'POST'; if(this.buttons) { dcAjax_buttons=this.buttons; for(var i = 0; iproszę czekać...','ajax_fullscreen_blocker_info'); grayOut(true); } if(!dcAjax_http_request || dcAjax_processing==false) // tworzymy nowy obiekt gdy go nie ma lub gdy ostatni zakonczyl dzialalnosc.. { try{dcAjax_http_request=new XMLHttpRequest();}catch (e){try{dcAjax_http_request=new ActiveXObject("Msxml2.XMLHTTP");}catch (e){dcAjax_http_request=new ActiveXObject("Microsoft.XMLHTTP");}} } if(dcAjax_http_request==null) {alert("Critical AJAX error!");return;} var queueElement=new dcAjaxQueue; queueElement.method=this.method; queueElement.url=this.url; queueElement.params=this.params; queueElement.callback_fnc=this.callback_fnc; queueElement.buttons=this.buttons; dcAjax_queue.push(queueElement); if(dcAjax_processing === false) { dcAjax_processing = true; this.default_response_function(); } } dcAjax.prototype.flush_request=function() { this.buttons=false; this.block_fullscreen=false; } dcAjax.prototype.default_response_function = function() { if(dcAjax_http_request.readyState==0) // The request is not initialized { requestData = dcAjax_queue.shift(); dcAjax_http_request.open(requestData.method,requestData.url,true); dcAjax_http_request.onreadystatechange=this.default_response_function; dcAjax_response_fnc=this.default_response_function; if(requestData.method=='POST') dcAjax_http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); dcAjax_http_request.send(requestData.params) } else if(dcAjax_http_request.readyState==4) // The request is complete { if(requestData.buttons) { for(var i=0;i 0) { requestData = dcAjax_queue.shift(); dcAjax_http_request.open(requestData.method,requestData.url,true); dcAjax_http_request.onreadystatechange=dcAjax_response_fnc; if(requestData.method=='POST') dcAjax_http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); dcAjax_http_request.send(requestData.params) } if(dcAjax_queue.length == 0) { dcAjax_processing = false; } } } /** klasa opisujaca element kolejki zadan ajaksowych method: POST/GET url: url zadania params: string zawierajacy zmienne zadania w formacie urlencoded callback_fnc: funkcja callbackowa do wywolania po wykonaniu zadania buttons: array, zawierajacy informacje o buttonach, ktore maja zostac zablokowane w trakcie wykonywania zadania. elementami tej tablicy maja byc obiekty klasy dcAjaxButtons */ function dcAjaxQueue() { this.method=false; this.url=false; this.params=false; this.callback_fnc=false; this.buttons=false; } /** klasa opisujaca przyciski majace zostac zablokowane w trakcie wuykonywania zadania ajaksowego. po utworzeniu jej obiektu mozna ustawic ponizsze wlasciwosci: id: id_buttona normal_value: zawartosc tekstowa, ktora ma zostac ustawiona po odblokowaniu buttona disabled_value: zawartosc tekstowa, ktora ma zostac ustawiona na czas blokowania buttona disabled_css: nazwa klasy CSS do ustawienia w trakcie blokowania buttona normal_css: nazwa klasy CSS do ustawienia w trakcie */ function dcAjaxButtons() { this.id=false; this.disabled_value=false; this.normal_value=false; this.disabled_css=false; this.normal_css=false; }