数组在退出 xmlhttpRequest 后丢失其内容

Array loses its contents after exiting xmlhttpRequest

本文关键字:退出 xmlhttpRequest 数组      更新时间:2023-09-26

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

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

AJAX-异步JavaScript和XML

有两件事会阻止它的工作: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 ,为假,退出循环
  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 都将设置为错误的值,并且结果将被记录,因此结果数组看起来像是空的。