Ik heb op allerlei manieren al geprobeerd om meerdere asynchrone ajax requesten te verzenden en te verwerken. Ik heb dit nodig voor een pagina waarbij meerdere xmlhttprequest objecten geen optie is (dan worden het namelijk een stuk of 50 tot 100 objecten).
Ik had daarom gedacht om te werken met een soort stack, dit werkt goed in internet explorer en firefox, maar om een of andere reden niet in opera. Weet iemand een andere oplossing, of ziet mijn fout? Ik heb al uitgebreid gezocht, maar ik vond geen werkende oplossing(wel een firefox-only oplossing).
De globals voor het begin van het object is niet netjes, dat weet ik, maar het probleem is dat de functie triggerFunction niet de object variabelen aankan.
Mijn testscript:
Mijn javascript code:
Ik had daarom gedacht om te werken met een soort stack, dit werkt goed in internet explorer en firefox, maar om een of andere reden niet in opera. Weet iemand een andere oplossing, of ziet mijn fout? Ik heb al uitgebreid gezocht, maar ik vond geen werkende oplossing(wel een firefox-only oplossing).
De globals voor het begin van het object is niet netjes, dat weet ik, maar het probleem is dat de functie triggerFunction niet de object variabelen aankan.
Mijn testscript:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| <html> <head> <script src="ajaxObject3.js"></script> <script> var dinges = lala; function lala(requestObj, customData) { document.getElementById("asd").innerHTML += "(" + customData + "): " + requestObj.responseText + "<br />"; } </script> </head> <body> <div id="asd"> </div> </body> <script> for(var i=0; i<10; i++) { customData = i+1; ajax.addRequest("tester.php?id=" + i, lala, customData) ajax.id = i; }; </script> </html> |
Mijn javascript code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
| var requestObject = false; var requestData = new Array(); var running = false; var ajax = new AJAX(); function AJAX() { // Create requestObject if (window.XMLHttpRequest) { requestObject = new XMLHttpRequest(); } else if (window.ActiveXObject) // Internet Explorer { requestObject = new ActiveXObject("Microsoft.XMLHTTP"); } // Add RequestData this.addRequest = function(url, triggerFunction, customData, postData) { nr = requestData.length; requestData[nr] = new Array(); requestData[nr]["url"] = url; requestData[nr]["triggerFunction"] = triggerFunction; requestData[nr]["customData"] = customData; requestData[nr]["postData"] = postData; // If RequestData isn't processed, start it now if (!running) this.processRequests(); } // Processes the responses of the server this.triggerFunction = function() { if (requestObject.readyState == 4) { requestData[0]["triggerFunction"](requestObject, requestData[0]["customData"]); requestData.shift(); if (requestData.length > 0) ajax.processRequests(); else running = false; } } // Processes the requestData this.processRequests = function() { running = true; url = requestData[0]["url"]; postData = requestData[0]["postData"]; if (requestObject) { if (postData == null) requestObject.open('GET', url, true); else requestObject.open('POST', url, true); requestObject.onreadystatechange = this.triggerFunction; requestObject.send(postData); requestObject.onreadystatechange = this.triggerFunction; } else { return false; } } } |
[ Voor 10% gewijzigd door Scorpion1984 op 08-04-2006 16:58 ]