我现在知道how to load columns, of a table, from an external webpage。Userscript循环几个HTTP请求并合并结果?
现在我想对扩大:
- 从多个页面(由玩家持仓排名表)获取表格数据。
- 将它合并到一个主表中。
This is the URL (http:...fantasysports.yahoo.com...pos=QB)该脚本当前提取。列是各个职位的团队名称和团队等级。
我想让它遍历其他位置(即WR,RB,TE)。这是通过将URL的最后2个字母更改为相应的值来完成的。然后我希望将所有这些数据放在一个数组中,其中第一列是团队名称,第二列是针对QB位置的排名#,第三列是针对WR位置的排名#,依此类推。
我的计划是将GM_xmlhttpRequest
放在一个for
循环中,该循环遍历不同的位置名称。
我的代码能够为职位显示单独的表格,但由于某些原因,他们没有按顺序排列。
我遇到的另一个问题是变量范围。目前newStatTable
在parseResponse
函数中定义,但我无法从函数外部访问它。我试图从var newStatTable
删除var
,使其成为一个全球性的,但它没有奏效。
这里是我要寻找一个样本输出数组(注:我只是随机选择这些队伍):
TeamName QB WR TE and so on...
--- -- -- --
Jacksonville Jaguars 1 6 28
Sanfrancisco 49ers 4 2 32
Seattle Seahawks 31 5 10
这里是我的尝试。
// ==UserScript==
// @name _Grab stuff of a *static*, third-party web site.
// @include http://football.fantasysports.yahoo.com/*
// @include https://football.fantasysports.yahoo.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant GM_xmlhttpRequest
// ==/UserScript==
pos = ["QB", "WR", "RB", "TE", "K", "DEF"];
for (x in pos) {
GM_xmlhttpRequest ({
method: "GET",
url: "http://football.fantasysports.yahoo.com/f1/326198/pointsagainst?pos=" + pos[x],
onload: parseResponse,
onerror: function (e) { console.error ('**** error ', e); },
onabort: function (e) { console.error ('**** abort ', e); },
ontimeout: function (e) { console.error ('**** timeout ', e); }
});
}
function parseResponse (response) {
var parser = new DOMParser();
var ajaxDoc = parser.parseFromString (response.responseText, "text/html");
var statRows = ajaxDoc.querySelectorAll ("#statTable0 > tbody > tr");
var newStatTable = $(statRows).map (function() {
var tblRow = $(this);
var teamRank = parseInt (tblRow.find (".rank-indicator").text().trim(), 10);
var teamName = tblRow.find ("td:eq(1)").text().trim().split(" vs")[0];
return [ [teamName, teamRank] ]; //Return Teamname, Rank #
}).get();
console.log (newStatTable);
}
所以你的问题是 - **他们不是为了**,对吗? - 我假设你知道httpRequests是异步的,那么你为什么期望它们是有序的呢? – Soren
当我说“不按顺序”时,我的意思是WR数组显示在QB数组之前。在for循环中,它不是为了顺序吗? 此外,我更大的问题是,我试图找到一种方法来结合所有的表,就像在我的示例数组输出 – Bijan
您的for循环顺序,但“GM_xmlhttpRequest”创建一个异步AJAX调用,并完成这些发生在for循环完成之后*,并且它们按您所调用的HTTP服务器决定完成它们的顺序完成 - 即以任意顺序完成。 – Soren