我有一个非常令人沮丧的问题,我希望有人可以帮助我。这是我的Greasemonkey脚本的一部分,我无法弄清楚为什么异步请求总是被发送到同一个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);
}
});
}
当我启动Fiddler时,无论我的收藏中有多少物品,我都可以看到它会发出相同的请求。无论第一个链接是什么,所有请求都发送到该链接。我已经验证了parse方法每次都成功地将一个不同的链接传递给SendData函数,但是请求总是发送到集合中的第一个URL。
我认为我拥有的东西与我发现的here类似,但也许我错过了一些东西。任何帮助将不胜感激。
答案 0 :(得分:0)
似乎url
未在closure中捕获,因此除了第一次GM_xmlhttpRequest
运行之外,其他所有内容都未定义。
修改SendData()
,如下所示:
function SendData(url)
{
var moreSubstantial = url + " ";
GM_xmlhttpRequest(
{
method: 'GET',
url: moreSubstantial,
应该足够了。
或者,您可以按顺序获取页面。将parse()
更改为:
function parse (details)
{
var element = $(details);
var coll = element.find("#my valid selector");
var TargetPages = coll.map (function() {return this.href;} );
(function getNextPage (J)
{
var PageURL = TargetPages[J];
GM_xmlhttpRequest
( {
method: "GET",
url: PageURL,
headers: {
'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
'Accept': 'application/atom+xml,application/xml,text/xml',
},
onload: function (responseDetails)
{
doSomething (responseDetails.responseText);
if (--J >= 0)
getNextPage (J);
}
} );
} ) (TargetPages.length - 1);
}