requestObject mit variablem Namen erzeugen
Linuchs
- javascript
Moin,
ich brauche zahlreiche requestObjecte für Ajax. Damit sie sich nicht gegenseitig stören, sollen sie verschiedene Namwen haben, aber mit einer zentralen Funktion erzeugt werden.
Wie übergebe ich der Funktion den gewünschten Namen? So geht's nicht, das Object ist anschließend undefined:
function makeRequestObject( requestName ) {
alert( "hier makeRequestObject (" +requestName +") in standard.js" );
if (window.XMLHttpRequest) {
requestName = new XMLHttpRequest(); // Mozilla, Safari, Opera
} else if (window.ActiveXObject) {
try {
requestName = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
}
catch (e) {
try {
requestName = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
}
catch (e) {}
}
}
// überprüfen, ob Request erzeugt wurde
if (!requestName) {
alert("Kann keine XMLHTTP-Instanz fuer " +requestName +" erzeugen");
}
}
...
var p510_request; makeRequestObject( p510_request ); // makeRequestObject => in standard.js
Mache ich es so:
var p510_request = new Object();
makeRequestObject( p510_request ); // makeRequestObject => in standard.js
var TID = 0;
function holeVeranstaltung() {
// TID ist vorhandene Veranstaltung, nicht erneut senden
var url = "500/p510lm.php?TID=" +TID +"&lg=[lg]";
alert( url );
p510_request.open('post', url, true); // Request öffnen
p510_request.send(null); // Request senden
p510_request.onreadystatechange = zeigeVeranstaltung; // Request auswerten
}
kommt die Meldung "TypeError: p510_request.open is not a function"
Linuchs
Tach!
ich brauche zahlreiche requestObjecte für Ajax. Damit sie sich nicht gegenseitig stören, sollen sie verschiedene Namwen haben, aber mit einer zentralen Funktion erzeugt werden.
Nein, das möchtest du eigentlich nicht. Stattdessen möchtest du sie in individuellen Variablen ablegen.
Wie übergebe ich der Funktion den gewünschten Namen?
Gar nicht. Eine Funktion kann aber ein Ergebnis haben, das man mit return zurückgibt. Und das kann durchaus auch ein erzeugtes Objekt sein, das der Aufrufer einer Variable zuweisen kann.
dedlfix.
Hallo dedlfix,
deine Idee mit return habe ich verstanden, aber mit der Ausführung gibt's Probleme:
function makeRequestObject( requestName ) {
// requestName wird fuer Fehlermeldung benoetigt
alert( "hier makeRequestObject (" +requestName +") in standard.js" );
if (window.XMLHttpRequest) {
request = new XMLHttpRequest(); // Mozilla, Safari, Opera
} else if (window.ActiveXObject) {
try {
request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
}
catch (e) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
}
catch (e) {}
}
}
if ( request ) {
return request;
} else {
alert("Kann keine XMLHTTP-Instanz fuer [" +requestName +"] erzeugen");
return FALSE;
}
}
...
var p510_request = makeRequestObject( "p510_request" ); // makeRequestObject => in standard.js
Fehlermeldung: "TypeError: p510_request is undefined ... remso.eu:239:2"
/* **************************************
*
* per Ajax neue Veranstaltung holen
*
* ************************************** */
var p510_request = makeRequestObject( "p510_request" ); // makeRequestObject => in standard.js
var TID = 0;
function holeVeranstaltung() {
// TID ist vorhandene Veranstaltung, nicht erneut senden
var url = "500/p510lm.php?TID=" +TID +"&lg=de";
alert( url );
p510_request.open('post', url, true); // Request öffnen ** line 239 **
p510_request.send(null); // Request senden
p510_request.onreadystatechange = zeigeVeranstaltung; // Request auswerten
}
Linuchs
Moment ... es scheint doch zu funktionieren, vielleicht war die alte standard.js noch im cache, obwohl ich immer auf [strg][F5] achte ...
Tach!
Moment ... es scheint doch zu funktionieren, vielleicht war die alte standard.js noch im cache, obwohl ich immer auf [strg][F5] achte ...
Das würde man im Debugger sehen, wenn da alter Code rumliegt.
dedlfix.
@@Linuchs
Du gehörst der Generation copy and paste an? Kopierst aber von deinen Urahnen?
if (window.XMLHttpRequest) { requestName = new XMLHttpRequest(); // Mozilla, Safari, Opera
Chrome gab’s damals wohl noch nicht. Dafür aber:
} else if (window.ActiveXObject) { try { requestName = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5 } catch (e) { try { requestName = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6 } catch (e) {} } }
Meinst du nicht auch, es wäre an der Zeit, den else
-Zweig auf den Müllhaufen der Geschichte zu werfen?
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
Hallo Gunnar,
} else if (window.ActiveXObject) { try { requestName = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5 } catch (e) { try { requestName = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6 } catch (e) {} } }
Meinst du nicht auch, es wäre an der Zeit, den
else
-Zweig auf den Müllhaufen der Geschichte zu werfen?
leider stimmen die Kommentare nicht und man würde den IE 8 auch ohne Not aussperren. Ich habe mir vor einigen Tagen eines meiner Scripte kritisch angesehen und mich entschlossen, das ActiveXObject-Zeugs erst mal noch drin zu lassen.
Gruß
Jürgen