Als developer maak ik veelvuldig gebruik van AJAX in de websites waar ik aan werk, oftewel een Asynchronous XMLHttpRequest.
Nu is het ook mogelijk om een Synchronous XMLHttpRequest te maken, het zogenaamde SJAX. Dit kan in sommige code-situaties voordelen hebben t.o.v. AJAX, maar de officiele organisaties die over de Javascript- en de Webstandaarden gaan hebben besloten om Synchronous XMLHttpRequest deprecated te verklaren.
De reden hiervoor, zegt men, is omdat het in veel situaties de standaard manier breekt waarop gebruikers met browsers omgaan.
Okay, goed en wel. De nieuwste browserversies laten developers dit op tijd weten door alvast waarschuwingen te geven in de Javascript console voor developers. Synchronous XMLHttpRequest gaat dus verdwijnen. Deprecatie is meedogenloos voor developers, dus het is adapt or die.
Maar nu is het volgende het geval. Soms is een SJAX functie van kritiek belang voor het functioneren van een website. Dit is ook het geval voor een website waar ik voor ontwikkel.
Wat ik tot nu toe heb gedaan is om de volgende betreffende functie proberen om te vormen naar een AJAX functie in plaats van een SJAX functie. Het verschil om dit te doen is miniem, maar het breekt de gereturnde output compleet.
Wanneer ik de functie omvorm van SJAX naar AJAX, dan wordt de output ineens 'null'. En aangezien deze functie veelvuldig gebruikt wordt voor vele elementen in de website, is het van belang dat ik de gereturnde output exact hetzelfde houd wanneer ik de functie herschrijf van SJAX naar AJAX.
Okay, dat is dus de SJAX versie van de functie. En om deze om te vormen naar een AJAX functie dient enkel en alleen "false" veranderd te worden naar "true".
Het probleem hierbij is dat dit de gereturnde output breekt. Ik krijg dus als output dan null.
Wat zowiezo zal moeten gebeuren, is dat die waarde op "true" gezet moet worden, want dat is AJAX. "false" zal in de toekomst niet meer geaccepteerd worden door browsers, want dat is het deprecated SJAX. (Synchronous XMLHttpRequest)
Aangezien ik vooruitloop op de zaken is er nog maar zeer weinig informatie te vinden online over hoe je een Synchronous request om kan scripten naar een Asynchronous zonder dat dit de output breekt. Informatie hierover is vooralsnog schaars. Waarschijnlijk zal dit veranderen wanneer browsers SJAX daadwerkelijk ook niet meer ondersteunen, maar het is beter om nu alvast niet achterover te gaan zitten en te gaan wachten tot de site breekt in browser na browser.
In a nutshell, ik zal het probleem moeten oplossen.
De Synchronous XMLHttpRequest zal moeten worden omgevormd naar een Asynchronous XMLHttpRequest zonder dat de gereturnde output verandert.
En dit dient tevens cross-browser te werken.
Mijn vraag is, hoe kan ik dat doen? Ik gebruik geen jQuery of JSON, maar puur Javascript/AJAX, dus ik zoek een oplossing zonder jQuery en JSON.
Nu is het ook mogelijk om een Synchronous XMLHttpRequest te maken, het zogenaamde SJAX. Dit kan in sommige code-situaties voordelen hebben t.o.v. AJAX, maar de officiele organisaties die over de Javascript- en de Webstandaarden gaan hebben besloten om Synchronous XMLHttpRequest deprecated te verklaren.
De reden hiervoor, zegt men, is omdat het in veel situaties de standaard manier breekt waarop gebruikers met browsers omgaan.
Okay, goed en wel. De nieuwste browserversies laten developers dit op tijd weten door alvast waarschuwingen te geven in de Javascript console voor developers. Synchronous XMLHttpRequest gaat dus verdwijnen. Deprecatie is meedogenloos voor developers, dus het is adapt or die.
Maar nu is het volgende het geval. Soms is een SJAX functie van kritiek belang voor het functioneren van een website. Dit is ook het geval voor een website waar ik voor ontwikkel.
Wat ik tot nu toe heb gedaan is om de volgende betreffende functie proberen om te vormen naar een AJAX functie in plaats van een SJAX functie. Het verschil om dit te doen is miniem, maar het breekt de gereturnde output compleet.
Wanneer ik de functie omvorm van SJAX naar AJAX, dan wordt de output ineens 'null'. En aangezien deze functie veelvuldig gebruikt wordt voor vele elementen in de website, is het van belang dat ik de gereturnde output exact hetzelfde houd wanneer ik de functie herschrijf van SJAX naar AJAX.
code:
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
| //SJAX function: get the content of an xml file and store it in XML DOM. function getXML_file(pathToFileString) { if (window.XMLHttpRequest) { myRequestObject = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { myRequestObject = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { myRequestObject = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } myRequestObject.open("GET", pathToFileString, false); myRequestObject.send(null); //Set and return the content as XML DOM xmlDoc = myRequestObject.responseXML; return xmlDoc; } |
Okay, dat is dus de SJAX versie van de functie. En om deze om te vormen naar een AJAX functie dient enkel en alleen "false" veranderd te worden naar "true".
Het probleem hierbij is dat dit de gereturnde output breekt. Ik krijg dus als output dan null.
Wat zowiezo zal moeten gebeuren, is dat die waarde op "true" gezet moet worden, want dat is AJAX. "false" zal in de toekomst niet meer geaccepteerd worden door browsers, want dat is het deprecated SJAX. (Synchronous XMLHttpRequest)
Aangezien ik vooruitloop op de zaken is er nog maar zeer weinig informatie te vinden online over hoe je een Synchronous request om kan scripten naar een Asynchronous zonder dat dit de output breekt. Informatie hierover is vooralsnog schaars. Waarschijnlijk zal dit veranderen wanneer browsers SJAX daadwerkelijk ook niet meer ondersteunen, maar het is beter om nu alvast niet achterover te gaan zitten en te gaan wachten tot de site breekt in browser na browser.
In a nutshell, ik zal het probleem moeten oplossen.
De Synchronous XMLHttpRequest zal moeten worden omgevormd naar een Asynchronous XMLHttpRequest zonder dat de gereturnde output verandert.
En dit dient tevens cross-browser te werken.
Mijn vraag is, hoe kan ik dat doen? Ik gebruik geen jQuery of JSON, maar puur Javascript/AJAX, dus ik zoek een oplossing zonder jQuery en JSON.