数组在退出 xmlhttpRequest 后丢失其内容
Array loses its contents after exiting 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]);
}
你应该知道 ajax 请求在将来的某个未知时间返回。
您只能在 ajax 请求的回调中使用该数组。
AJAX-异步JavaScript和XML
有两件事会阻止它的工作:Web 请求将是异步的,并且值将全部存储在数组中的同一位置。
以下是事情发生的顺序,假设 count = 2:
- 设置
i = 0
- 检查,
i < count
,为真,继续循环 - Web 请求 A 启动
- 打印
result[0]
- 设置
i = 1
- 检查,
i < count
,为真,继续循环 - Web 请求 B 启动
- 打印
result[1]
- 设置
i = 2
- 检查,
i < count
,为假,退出循环 - 。时间流逝...
- Web 请求 A 完成,设置
result[i]
,因此设置result[2] = "foo"
- Web 请求 B 完成,设置
result[i]
,因此设置result[2] = "bar"
这意味着结果数组最终为 [undefined, undefined, "bar"]
.数组的最后一个值可以是 foo 或 bar,具体取决于哪个 Web 请求首先完成。无论哪种方式,当 Web 请求完成时,i
都将设置为错误的值,并且结果将被记录,因此结果数组看起来像是空的。
相关文章:
- 弹出窗口出现,然后退出
- 退出全屏不起作用
- 基于两个条件退出While循环
- 如何准确执行加载脚本&退出弹出窗口
- firefox插件:退出不工作的应用程序观察器
- 无法执行文件.退出Acrobat PDF中的操作
- 如何从Node Webkit应用程序中退出外部CMD文件
- Backbone fetch中的Ajax在fetch调用退出后完成,因此fetch调用中没有成功/失败事件
- 如何在不退出javascript的情况下从javascript更新网页
- javascript在退出时打开窗口url
- PHP's退出;在Javascript中
- 自定义HTML5视频控件-退出按钮不会启动全屏切换功能
- JSON:loop Invoice Items:如果InvoiceNo未退出则添加,如果退出则更新值,示例包括在内
- 根据单个用户的决定禁用谷歌标签管理器(选择退出)
- FancyBox退出IFRAME回调
- Web服务器意外退出,正在重新启动新实例
- 如何退出全屏网络应用程序
- 使用jQuery检测用户是否退出全屏视频
- 如何使casperjs继续而不是在出现异常时退出
- nodejs:child_process.spawn未报告退出代码