I’m having a really frustrating problem I hope someone can help me with. Here is a piece of my Greasemonkey script, I can’t figure out why the asynchronous requests are always sent to the same URL.
function parse(details) {
var element = $(details);
var coll = element.find("#my valid selector");
$.each(coll, function(index, href) {
SendData(href);
});
}
function SendData(url) {
GM_xmlhttpRequest ({
method: 'GET',
url: url,
headers: {
'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
'Accept': 'application/atom+xml,application/xml,text/xml',
},
onload: function(responseDetails) {
doSomething(responseDetails.responseText);
}
});
}
When I fire up Fiddler, I can see that it makes the same request no matter how many items are in my collection. Whatever the first link is, all requests are made to the that link. I have verified that the parse method successfully passes a different link to the SendData function every time, but the requests are always made to the first URL in the collection.
I thought what I had was similar to what I found here, but maybe I’m missing something. Any help would be appreciated.
It seems as though
urlis not getting captured in a closure, so it’s undefined for all but the firstGM_xmlhttpRequestrun.Modifying
SendData(), like so:should be enough.
Or, you can get the pages sequentially. Change
parse()to something like: