| 

.NET C# Java Javascript Exception

3
Hi zusammen,
hab hier etwas JS-Code den ich gern irgendwie zusammenfassen möchte um mein Script möglichst klein zu halten. Hab schon verschiedene sachen versucht aber ohne Erfolg :/.
Hat von Euch jemand eine Idee wie ich folgenden Code vereinfachen kann?

if (window.XMLHttpRequest) {
XMLHTTP1 = new XMLHttpRequest();
XMLHTTP2 = new XMLHttpRequest();
XMLHTTP3 = new XMLHttpRequest();
XMLHTTP4 = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
try {
XMLHTTP1 = new ActiveXObject("Msxml2.XMLHTTP");
XMLHTTP2 = new ActiveXObject("Msxml2.XMLHTTP");
XMLHTTP3 = new ActiveXObject("Msxml2.XMLHTTP");
XMLHTTP4 = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (ex) {
try {
XMLHTTP1 = new ActiveXObject("Microsoft.XMLHTTP");
XMLHTTP2 = new ActiveXObject("Microsoft.XMLHTTP");
XMLHTTP3 = new ActiveXObject("Microsoft.XMLHTTP");
XMLHTTP4 = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (ex) {}
}
}


Danke für Eure Hilfe!
;)
10.10.2012
DaTaBeRt 416 1 7
1 Antwort
2
Variante 1:

Eine Funktion verwenden gemäßt den Don´t Repeat Yourself (DRY) - Clean Code Developer Regeln.

<script>
if (window.XMLHttpRequest) {
XMLHTTP1 = getAjaxObject();
XMLHTTP2 = getAjaxObject();
XMLHTTP3 = getAjaxObject();
XMLHTTP4 = getAjaxObject();
}

function getAjaxObject(){
var ajaxO = null;
if (window.XMLHttpRequest)
ajaxO = new XMLHttpRequest();
else if (window.ActiveXObject) {
try {
ajaxO = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (ex) {
try {
ajaxO = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (ex) {}
}
}
return ajaxO;
}
</script>


Variante 2:

Etwas komplizierter. Solltest du nur verwenden wenn du es auch verstehst.
"ajaxInit" ist ein Array was alle Inizialisierungsvarianten enthällt.
Nun willst du 4 Variablen haben, also wird eine Schleife erzeugt die 4 mal durchlaufen wird. Diese probiert alle Varianten aus "ajaxInit" durch bis sie eine findet die funktioniert. Das Ergebnis wird in das window Objekt geschrieben welches u.a. alle Variablen enthällt die global definiert wurden. (es ist also egal ob ich "var a=0;" oder "window['a']=0;" schreibe. Mit "alert(a);" bekomme ich in beiden Fällen die "0" raus.

<script>
var ajaxInit = [
function(){return new XMLHttpRequest();}
, function(){return new ActiveXObject("Msxml2.XMLHTTP");}
, function(){return new ActiveXObject("Microsoft.XMLHTTP");}
]
for(var i=1; i<=4; i++)
for(var k=0; k<ajaxInit.length; k++)
try{
window["XMLHTTP"+i]=ajaxInit[k].call();
break;
}
catch (ex) {}
</script>
10.10.2012
Floyd 14,6k 3 9
Danke :) ich werd das mal damit versuchen
DaTaBeRt 10.10.2012
die 2. Variante ist perfekt :D hatte eh schon eine solche schleife und konnte darin das gleich mit einbinden ^^
DaTaBeRt 10.10.2012

Stelle deine Js-Frage jetzt!