Ik ben al even aan het stoeien met een goede oplossing voor de volgende problemen.
Verschillende browsers hebben verschillende objects nodig om xmlrequests te doen,
Verschillende browsers hebben een verschillende aantal maximum concurrent requests.
Een request binnen een class kan wel mooi variable gebruiken als pointer naar het xmlrequet obejct, maar als deze variable niet globaal is binnen het class kan je er bij de verwerkende functie niet meer bij, en als de variabele wel globaal is, kun je maar maximaal een request tegeleik doen (of je moet de pointers gaan opslaan in ene array, maar dan moet je ze ook weer recyclen.)
Hoe lossen jullie dit op?
Ik heb voorbeeld de volgende code: (btje opgeruimd)
Niet alle code en vars zijn aanwezig, maar you'l get the idea.
Ik heb de allerlei events die gebeuren, maar allemaal wel binnen de scope van de class moeten gebeuren.
Daarnaast zijn er allerlei xmlrequests nodig die ook binnen de scope moeten worden gedaan, en eventueel gequeued moeten kunnen worden.
Ik zoek een elegante oplossing, maar ben een beetje verzand geraakt in de complexiteit van het probleem.
Verschillende browsers hebben verschillende objects nodig om xmlrequests te doen,
Verschillende browsers hebben een verschillende aantal maximum concurrent requests.
Een request binnen een class kan wel mooi variable gebruiken als pointer naar het xmlrequet obejct, maar als deze variable niet globaal is binnen het class kan je er bij de verwerkende functie niet meer bij, en als de variabele wel globaal is, kun je maar maximaal een request tegeleik doen (of je moet de pointers gaan opslaan in ene array, maar dan moet je ze ook weer recyclen.)
Hoe lossen jullie dit op?
Ik heb voorbeeld de volgende code: (btje opgeruimd)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
| // functie om scopes voor events goed te houden. function attachEventHandler(oObject, sMethodName) { return function () { return oObject[sMethodName].apply(oObject, arguments); }; } function freevolution(){ this.scrollDirection=null; this.scrollby=3; this.scrolltime=100; this.xmlhttp=false; // functie binden. this.gui_button_bottom=document.getElementById('knopje'); this.gui_button_bottom.onmouseover=attachEventHandler(this, "setScrollDirection"); // functions this.setScrollDirection=setScrollDirection; this.fetch=fetch; this.handleFetch=handleFetch; this.scroll=scroll; this.scrollUp=scrollUp; } function setScrollDirection(){ this.scrollDirection='top'; // fire up the scrollers! window.setTimeout(this.scroll.bind(this),this.scrolltime); } function scroll(){ this.scrollUp(); if(this.scrollDirection!=null){ window.setTimeout(this.scroll.bind(this),this.scrolltime); } } function scrollUp(){ this.overlap[2]=this.overlap[2]-this.scrollby; this.overlap[0]=this.overlap[0]+this.scrollby; this.viewport[2]=this.viewport[2]+this.scrollby this.viewport[3]=this.viewport[3]+this.scrollby; this.map.style.top=parseInt(this.map.style.top)-this.scrollby+'px'; if(this.overlap[2]<33){ this.destroy(this.viewport[0]-64,this.viewport[1]+64,this.viewport[2]-64,this.viewport[2]); this.overlap[0]=this.overlap[0]-64; this.fetch(this.viewport[0]-64,this.viewport[1]+64,this.viewport[3],this.viewport[3]+64); this.overlap[2]=this.overlap[2]+64; } return true; } // globale functie. (niet compleet maar ok) function createRequestObject(){ var request_o; //declare the variable to hold the object. var browser = navigator.appName; //find the browser name if(browser == "Microsoft Internet Explorer"){ /* Create the object using MSIEs method */ request_o = new ActiveXObject("Microsoft.XMLHTTP"); } else { /* Create the object using other browsers method */ request_o = new XMLHttpRequest(); } return request_o; //return the object } function fetch(startX,endX,startY,endY){ this.xmlhttp = false; this.xmlhttp=createRequestObject(); // cook up which range we need to get. var url = "../xml/tiles.php?startX="+startX+"&endX="+endX+"&startY="+startY+"&endY="+endY+"&waterlevels="+getsetting(this.quality,'water_levels')+'&watertransparancy='+getsetting(this.quality,'water_transparancy'); //window.open(url); this.xmlhttp.open("GET", url, true); this.xmlhttp.onreadystatechange = attachEventHandler(this, "handleFetch"); this.xmlhttp.send(null); return true; } function handleFetch(){ if(this.xmlhttp.readyState == 4 && this.xmlhttp.status == 200) { var response=this.xmlhttp.responseXML; var tiles=response.getElementsByTagName("tile"); var tilescount=tiles.length; for(var i=0;i<tilescount;i++){ this.addtile(tiles[i].attributes[0].nodeValue, tiles[i].attributes[1].nodeValue, tiles[i].attributes[2].nodeValue, tiles[i].attributes[3].nodeValue, tiles[i].attributes[4].nodeValue, tiles[i].attributes[5].nodeValue, tiles[i].attributes[6].nodeValue ); } } } |
Niet alle code en vars zijn aanwezig, maar you'l get the idea.
Ik heb de allerlei events die gebeuren, maar allemaal wel binnen de scope van de class moeten gebeuren.
Daarnaast zijn er allerlei xmlrequests nodig die ook binnen de scope moeten worden gedaan, en eventueel gequeued moeten kunnen worden.
Ik zoek een elegante oplossing, maar ben een beetje verzand geraakt in de complexiteit van het probleem.
openkat.nl al gezien?