ugrás a tartalomhoz

Saját ajax-motor hiba

xmouse · 2008. Már. 23. (V), 12.42
Sziasztok!

Összedobtam egy kis ajax-motort, de van vele egy problémám. Amikor egyszerre vagy egymás után több kérelmet indítok (különböző példányokból), akkor csak az egyik tér vissza eredménnyel, tehát valahogy összeakadnak.
Arra gondoltam, hogy a request-et az objektum sajátjává kéne tenni, de nem tudom, hogy lehet ezt megtenni. Tudna valaki segíteni?

ajax = function(){
	
	this.makeRequest = function(method, url, callbackFunction, data){
		request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
		request.open(method, url, true);
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		request.onreadystatechange = function(){
			if (request.readyState == 4 && request.status == 200) {
				callbackFunction();
			}
		}
		request.send(data);
	}
	
	this.getResponse = function(){
		if (request.responseText) {
			return (request.responseText);
		}
		else {
			return (request.responseXML);
		}
	}
	
}
Köszi:

xmouse
 
1

nem teljesen világos, hogy mit akarsz

toxin · 2008. Már. 23. (V), 14.35
ha singelton-t, nem akarod példányosítani az ajax-ot akkor

var ajax = {            					
                makeRequest : function(method, url, callbackFunction, data){
					var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");  
                    request.open(method, url, true);
                    request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					var self = this;					
                    request.onreadystatechange = function(){
                        if (request.readyState == 4 && request.status == 200) {
                           callbackFunction(self.getResponse(request));
                        }
                    }
                    request.send(data);
                },
				                
                getResponse : function(response){
                    if (response.responseText) {
                        return (response.responseText);
                    }
                    else {
                        return (response.responseXML);
                    }
                }
                
            }
					
			ajax.makeRequest("POST","1.txt",function(response){
					console.log(response);
			});
			ajax.makeRequest("POST","2.txt",function(response){
					console.log(response);
			});
ha igen akkor pl.

var Ajax = function(){
            					
                this.makeRequest = function(method, url, callbackFunction, data){
					this.request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");  
                    this.request.open(method, url, true);
                    this.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					var self = this;					
                    this.request.onreadystatechange = function(){
                        if (self.request.readyState == 4 && self.request.status == 200) {
						   callbackFunction();
                        }
                    }
                    this.request.send(data);
                }
				                
                this.getResponse = function(){
                    if (this.request.responseText) {
                        return (this.request.responseText);
                    }
                    else {
                        return (this.request.responseXML);
                    }
                }
                
            }
			
			var ajax1 = new Ajax;			
			ajax1.makeRequest("POST","1.txt",function(request){
					console.log(ajax1.getResponse());
			});
			var ajax2 = new Ajax;
			ajax2.makeRequest("POST","2.txt",function(request){
					console.log(ajax2.getResponse());
			})
			
magyarán az volt a baj, hogy nálad a
request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");


a globális névtérbe jött létre

üdv Csaba
2

működik

xmouse · 2008. Már. 23. (V), 17.38
Nagyon köszönöm! Már 3 napja törtem rajta a fejem.
A második változatra gondoltam.
Köszi.