Als je de titel leest lijkt het zo simpel, maar ik loop me toch een tijd te verspillen..
Ik wil wat informatie van een aantal webservers halen waarbij loading textje verschijnt (zoals bij google webapps). Alleen ik wil voor iedere server een apart balkje, waarmee iets gebeurt afhankelijk van of de request goed of fout gaat.
Dat lukt allemaal prima, behalve dat de anonieme functies in de ajax-request-callbackfuncties de waardes pas overnemen als ze aan de beurt zijn, waardoor reqGood() of reqBad() altijd de laatste reqId waarde aanspreken in plaats van de waarde die reqId had op het moment dat het ajax request werd gemaakt.
Ik hoop dat bovenstaand verhaal duidelijk is icm een stukje code:
Kortom, maakt niet uit welke van alle berichtjes goed of fout gaat, de goed of fout functie wordt altijd toegepast op het laatste berichtje. Niet goed.
Ik dacht het eerst te fixen met een array om elke nieuwe id in een array te stoppen, maar de index n is uiteraard ook uitgeteld in de callback. De volgende optie leek eval(), maar dat is niet te gebruiken in een object. Althans ik kreeg niets voor elkaar.
Het laatste wat misschien zou helpen is om handmatig een variabele aan het xmlHttpRequest object mee te geven via $.ajax beforeSend, omdat dat object ook mee wordt gegeven in de succes/error functies, waardoor ik deze in de callback weer kan terughalen. Is dat mogelijk? Of heeft iemand een ander idee?
Ik wil wat informatie van een aantal webservers halen waarbij loading textje verschijnt (zoals bij google webapps). Alleen ik wil voor iedere server een apart balkje, waarmee iets gebeurt afhankelijk van of de request goed of fout gaat.
Dat lukt allemaal prima, behalve dat de anonieme functies in de ajax-request-callbackfuncties de waardes pas overnemen als ze aan de beurt zijn, waardoor reqGood() of reqBad() altijd de laatste reqId waarde aanspreken in plaats van de waarde die reqId had op het moment dat het ajax request werd gemaakt.
Ik hoop dat bovenstaand verhaal duidelijk is icm een stukje code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| (...) for (var n=0; n<servers.length; n++) { var reqId = "request"+n; // id van request - for $ selector var reqSrv = servers[n]; // request server // Add load msg $("#msgContainer").append($("<div id=\""+reqId+"\"><span>Loading from "+reqSrv+"</span></div>")); // Do the requests $.ajax({ url: servers[n], data: "ajaxrequest=true", dataType: "xml", success: function(rXML){reqGood(rXML,reqId);}, error: function(r,s,e){reqBad(r,s,e,reqId,reqSrv);} // Waardes zijn dynamic tot functie, niet goed! }); } |
Kortom, maakt niet uit welke van alle berichtjes goed of fout gaat, de goed of fout functie wordt altijd toegepast op het laatste berichtje. Niet goed.
Ik dacht het eerst te fixen met een array om elke nieuwe id in een array te stoppen, maar de index n is uiteraard ook uitgeteld in de callback. De volgende optie leek eval(), maar dat is niet te gebruiken in een object. Althans ik kreeg niets voor elkaar.
Het laatste wat misschien zou helpen is om handmatig een variabele aan het xmlHttpRequest object mee te geven via $.ajax beforeSend, omdat dat object ook mee wordt gegeven in de succes/error functies, waardoor ik deze in de callback weer kan terughalen. Is dat mogelijk? Of heeft iemand een ander idee?
🇪🇺 Buy from EU (GoT)