xmlHttpRequest probleempje.

Status
Niet open voor verdere reacties.

ErikBooy007

Terugkerende gebruiker
Lid geworden
24 mei 2007
Berichten
3.814
Het is vast iets heel simpels, maar ik zie het even niet. Het gaat hier overigens om een Vista Sidebar Gadget, maar dat zou niet uit mogen maken.

Deze code werkt niet (als ik dus init() aanroep):

[JS]
function getRSS() {
rssObj = new ActiveXObject("Msxml2.XMLHTTP");
rssObj.open("GET", "http://www.erikbooy.nl/Google%20Seach%20API%20Key.txt", true);
rssObj.onreadystatechange = function() {
if (rssObj.readyState === 4) {
if (rssObj.status === 200) {
return rssObj.responseText;
}
}
}
rssObj.send(null);
}

function init() {
output(getRSS());
}
[/JS]

terwijl deze alleen wel werkt (hier roep ik getRSS() aan):

[JS]
function getRSS() {
rssObj = new ActiveXObject("Msxml2.XMLHTTP");
rssObj.open("GET", "http://www.erikbooy.nl/Google%20Seach%20API%20Key.txt", true);
rssObj.onreadystatechange = function() {
if (rssObj.readyState === 4) {
if (rssObj.status === 200) {
output(rssObj.responseText);
}
}
}
rssObj.send(null);
}
[/JS]

output is een functie die iets naar het scherm schrijft.

Met andere woorden, waarom kan ik de responseText niet returnen uit de functie...
 
Omdat je[JS]rssObj.onreadystatechange = function() {
[/JS]dus als anonieme functie aanroept ( = function(){ } ) zal de 'return' dus ook naar de anonieme functie returnen, en niet naar je RSS functie. Daarom is het nodig om een helper-functie (in dit geval output()) te gebruiken.


:thumb:
 
Ah, zit dat zo!

Fantastisch! Heb er al een tijd naar zitten staren en kwam er niet uit. En aangezien ik zelfs niet ongeveer wist waar het aan kon liggen, kon ik met Google ook weinig vinden.

Maar hartelijk bedankt, achteraf is het zo logisch... :o
 
:p

ik heb het ook niet zo met dat 'asynchroon' programeren, het is een heel iets op zichzelf. Vooral met dat 'AJAX' geval is het erg hinderlijk soms.



Trouwens, als je je 3e param van je open() op false zet, wordt het synchroon. Maar dan moet je code wel op het 'downloaden' wachten. (mocht je dit nog niet weten :P waarschijnlijk wel maargoed)
 
Ja, die oplossing had ik net bedacht naar aanleiding van jouw uitleg.

Thanks! :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan