111*_*111 1 javascript ajax asynchronous xmlhttprequest
嗨我试图使用不同的参数多次访问一个资源
在这种情况下请求
var domains = [
'host1',
'host2'
];
var requests = new Array();
for ( i in domains )
{
requests[i]=new request(domains[i]);
}
function request(site)
{
var url = 'get_remote_status.php?host='+site;
var queues = {};
http_request = new XMLHttpRequest();
http_request.open("GET", url, true, 'username', 'password');
http_request.onreadystatechange = function () {
var done = 4, ok = 200;
if (http_request.readyState == done && http_request.status == ok) {
queues = JSON.parse(http_request.responseText);
var queuesDiv = document.getElementById('queues');
print_queues(queues, queuesDiv, site);
}
};
http_request.send(null);
}
Run Code Online (Sandbox Code Playgroud)
但是,代码lambda只处理其中一个请求.Chromium报告已收到这两个请求,并且可以在资源窗格中查看这些请求.
此外,如果我使请求同步,那么它工作正常.但是,由于请求可能会超时,因此发布代码无法接受此操作.
谢谢
定义http_request
使用var
.目前,您正在将XHR对象分配给全局变量.因此,您的脚本一次只能处理一个XHR.
相关的错误代码:
function request(site)
{
var url = 'get_remote_status.php?host='+site;
var queues = {};
http_request = new XMLHttpRequest();
Run Code Online (Sandbox Code Playgroud)
拟议的变更:
function request(site)
{
var url = 'get_remote_status.php?host='+site;
var queues = {};
var http_request = new XMLHttpRequest(); //VAR VAR VAR !!!
Run Code Online (Sandbox Code Playgroud)
在var
变量之前省略时,变量将在global(window
)范围内定义.如果var
在变量之前使用,则变量在本地范围内定义(在函数中request
,在本例中).