退出xmlhttpRequest后,Array丢失其内容

时间:2012-05-13 23:51:48

标签: javascript arrays gm-xmlhttprequest

我知道这是一个愚蠢的问题,但我想问一下如何将内容保存到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]);
}​

2 个答案:

答案 0 :(得分:2)

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

AJAX- 异步 JavaScript和XML

答案 1 :(得分:1)

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

假设count = 2:

,这是顺序发生的事情
  1. 设置i = 0
  2. 检查,i < count为真,继续循环
  3. Web请求A启动
  4. 打印result[0]
  5. 设置i = 1
  6. 检查,i < count为真,继续循环
  7. Web请求B启动
  8. 打印result[1]
  9. 设置i = 2
  10. 检查,i < count,为false,退出循环
  11. ...时间过去了......
  12. 网络请求A完成,设置result[i],因此请设置result[2] = "foo"
  13. 网络请求B完成,设置result[i],因此请设置result[2] = "bar"
  14. 这意味着结果数组最终为[undefined, undefined, "bar"]。数组的最后一个值可以是foo或bar,具体取决于首先完成的Web请求。无论哪种方式,当web请求完成时,i将被设置为错误的值,结果将被记录,因此看起来结果数组是空的。