views:

1419

answers:

2

I have this code here:

var infiltrationResult;

while(thisOption) {
    var trNode = document.createElement('tr');
    var tdNode = document.createElement('td');
    var hrefNode = document.createElement('a');

    infPlanetID = thisOption.getAttribute('value');

  var myURL = "http://www.hyperiums.com/servlet/Planetinf?securitylevel=90&newinfiltr=New+infiltration&planetid=" + PlanetID + "&infplanetid=" + infPlanetID;

    GM_xmlhttpRequest({
        method: 'GET',
        url: myURL,
        headers: {
            'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
            'Accept': 'application/atom+xml,application/xml,text/xml',
        },
        onload: function(responseDetails) {
       if (responseDetails.responseText.match(/<b>Invalid order<\/td><\/tr><tr><td><BR><center><font color=#AAAA77 face=verdana,arial size=2>The target planet is blocking all infiltrations[\s\S]<BR><BR>/im)) {
        // Successful match
        infiltrationResult = 'Invalid Order';
       } else {
        // Match attempt failed
        infiltrationResult = 'Infiltration Successfully Created';
       }
        }
    });

When I add

alert(infiltrationResult);

right after it is assigned, I correctly see the string.

However, after the function has exited, I have try the same alert and I get:

undefined

Any ideas what I'm doing wrong? I'm guessing it's some simple silly javascript synxtax I'm missing here :)

G-Man

+5  A: 

The request runs asynchronously. That's why the function takes an onload callback function in the first place. If it were synchronous, then GM_xmlhttpRequest would simply return the response details like an ordinary function.

While waiting for the request to return, the code after the call to GM_xmlhttpRequest continues running. Your script correctly identifies that infiltrationResult is undefined because the request hasn't completed yet.

If you need to do more than just assign the variable when the request comes back, then do that in the onload callback.

Rob Kennedy
You were absolutely right. Moving the code that monkeyed with that result into the function fixed everything.Thanks!G-Man
GeoffreyF67
A: 

can you please give us an example how it can be accomplished. Thanks

Chris
Welcome to Stack Overflow. This section is for answers, but you have not *answered* this question. Stack Overflow isn't an ordinary bulletin board. You have a *new question* requesting an example of how "it" can be accomplished, so please use the "ask a question" button at the top of any page. Then describe in full sentences what "it" is. You should probably also include some code showing what you have unsuccessfully tried so far. Also tell why the [examples at the Greasmonkey wiki](http://wiki.greasespot.net/GM_xmlhttpRequest#Examples) didn't help.
Rob Kennedy