Javascript:XHR不处理多个异步请求

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报告已收到这两个请求,并且可以在资源窗格中查看这些请求.

此外,如果我使请求同步,那么它工作正常.但是,由于请求可能会超时,因此发布代码无法接受此操作.

谢谢

Rob*_*b W 8

定义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,在本例中).