hotti: AJAX mehrere Requests parallel laufen lassen und Status abfragen

Beitrag lesen

hi,

Ach so. Der "Callbackfunktion" "handle_response" sollte vielleicht noch übergeben werden, welcher Request denn fertig ist. Also:

clients[i].onreadystatechange = handle_response(i);

Logo, ein überschaubarer Code sollte es schon sein ;-)

Bisher war das für mich ausreichend:

  
// Erstelle XHR Objekt  
function mob(){  
	var mob = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");  
	return mob;  
}  
  
// CompatMode  
// ajax core  
function ajaxRequest(hash){  
	var xhr = mob();  
  
	function rx(){  
		if(xhr.readyState == 4){  
			if(xhr.status == 200){  
				if(hash.headers){  
					hash.etag = xhr.getResponseHeader("ETag");  
					hash.type = xhr.getResponseHeader("Content-Type");  
				}			  
				hash.callback(xhr.responseText);  
			}  
			else{ hash.errstr = 'Server anwortet nicht'; }  
		}  
	}  
  
	if(hash.method == 'POST'){  
		xhr.open("POST", hash.url, true);  
		xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
		xhr.setRequestHeader("Content-length", hash.params.length);  
		xhr.setRequestHeader("Connection", "close");  
		xhr.send(hash.params);  
		xhr.onreadystatechange = rx;  
	}  
	else{  
		var url = hash.url + '?' + hash.params;  
		xhr.open("GET", url, true);  
		xhr.send(null);  
		xhr.onreadystatechange = rx;  
	}  
  
	return true;  
}  

Ein Req. => ein Objekt. Ein weiteres Object wird der Funktion ajaxRequest() übergeben, da steckt auch die callback() Funktion drin, die im <script> entsprechend angepasst werden muss. Grundgerüst und die entsprechenden Attribute für das angepasste Objekt:

  
        <script type="text/javascript">  
            var stat = {  
                callback: function(response){  
                  // Einbau Response im DOM  
                  // JSON oder eigene Struktur  
                },  
                call: function(){  
                    this.url = '/cgi-bin/perllog.cgi';  
                    this.params = 'x=y'  
                    this.method = 'POST';  
                    ajaxRequest(this);  
                }  
            }  
  
            stat.call();  
  
        </script>  
  

Hotti