-4

我知道这是一个愚蠢的问题,但我想问我如何将内容保存到 xmlhttpRequest 内的数组中并在之后使用它们。

onlinestatus = new Array(count);
for (var i = 0; i <= count; i++) {
    GM_xmlhttpRequest({
        method: 'GET',
        url: 'http://www.website.com/player/' + player[i] + '/details.php',
        onload: function(responseDetails) {
            buddypage = jQuery(responseDetails.responseText);
            online = jQuery("span#OnlineStatus", buddypage);
            onlinestatus[i] = online.text();
        }
    });
    GM_log("Current: " + onlinestatus[i]);
}​
4

2 回答 2

2

您应该知道 ajax 请求在未来某个未知时间返回。
您只能在 ajax 请求的回调中使用该数组。

AJAX -异步JavaScript 和 XML

于 2012-05-13T23:54:44.357 回答
1

有两件事会阻止此工作:Web 请求将是异步的,并且值将全部存储在数组中的同一位置。

假设 count = 2,这是事情发生的顺序:

  1. i = 0
  2. 检查, i < count, 为真, 继续 for 循环
  3. Web 请求 A 开始
  4. 打印result[0]
  5. i = 1
  6. 检查, i < count, 为真, 继续 for 循环
  7. Web 请求 B 开始
  8. 打印result[1]
  9. i = 2
  10. 检查, i < count, 为假,退出for循环
  11. ... 时间流逝 ...
  12. Web 请求 A 完成,设置result[i],设置result[2] = "foo"
  13. Web 请求 B 完成,设置result[i],设置result[2] = "bar"

这意味着结果数组以[undefined, undefined, "bar"]. 数组的最后一个值可以是 foo 或 bar,这取决于哪个 Web 请求首先完成。无论哪种方式,在 Web 请求完成时,i都已经被设置为错误的值,并且结果已经被记录,所以结果数组看起来是空的。

于 2012-05-14T00:06:42.483 回答