Javascript 处理并发xmlhttprequests

Javascript 处理并发xmlhttprequests,javascript,xmlhttprequest,Javascript,Xmlhttprequest,在一个函数中,我想使用xmlhttprequests下载三个资源;当它们被加载时,我想使用上述请求的响应调用一个函数。但是,当我尝试调用函数时,前面提到的响应是未定义的 function(){ var File=null var Meta=null var Engine=null var xhrFile = new XMLHttpRequest() var xhrMeta = new XMLHttpRequest(); var xhrEngine = new XMLHttpRequest();

在一个函数中,我想使用xmlhttprequests下载三个资源;当它们被加载时,我想使用上述请求的响应调用一个函数。但是,当我尝试调用函数时,前面提到的响应是未定义的

function(){
var File=null
var Meta=null
var Engine=null
var xhrFile = new XMLHttpRequest()
var xhrMeta = new XMLHttpRequest();
var xhrEngine = new XMLHttpRequest();
xhrFile.open('GET','/archive/file.txt',true)
xhrMeta.open('GET','/template/file.js',true)
xhrEngine.open('GET','/javascript/app/hemp/engine.js',true)
xhrFile.responseType='arraybuffer';
xhrMeta.responseType='text';
xhrEngine.responseType='text';
xhrFile.onload = function(){File=xhrFile.response}
xhrMeta.onload = function(){File=eval(xhrMeta.response)}    
xhrEngine.onload = function(){Engine=eval(xhrEngine.response)}
xhrFile.send();
xhrMeta.send();
xhrEngine.send();
var DDM=Engine({'file':File,'meta':Meta}) 
return DDM
};
代码不起作用,需要进行一些改装

最后一部分: var DDM=Engine({'file':file,'meta':meta}) 返回DDM

将始终产生未定义的结果,因为此时,由于XMLHttpRequests可能尚未返回,文件和元可能尚未分配任何内容。换句话说,它们的.onload()函数还没有被调用,因此File/Meta还没有被定义


您要做的是在onload()中检查文件和/或元,看看它们是否已定义(即它们的XMLHttpRequests已成功返回)。如果是,那么您可以调用引擎({'file':file,'meta':meta}),因为此时它们就存在了。

我解决了它。。。这并不难。。。只是一点点想象力

var solve = function(File,Meta,Engine){
    var DDM=Engine({'file':File,'meta':Meta});
    return DDM;
};


//code added to the onload listeners 
xhrFile.onload = function(){
    File=xhrFile.response;
    if (File && Meta && Engine){
        return solve(File,Meta,Engine);
    }
};
xhrMeta.onload = function(){
    Meta=eval(xhrMeta.response);
    if (File && Meta && Engine){
        return solve(File,Meta,Engine);
    }
};
xhrEngine.onload = function(){
    Engine=eval(xhrEngine.response);
    if (File && Meta && Engine){
        return solve(File,Meta,Engine);
    }
};

堆栈溢出用于询问编程问题,而不仅仅是要求人们为您修复代码。也许您必须改进您的符号学。。它们看起来太紧了,请添加“代码不工作”的详细信息。另外,请尝试使您的代码更加一致(变量名大写,使用分号)-当前示例显示您缺乏努力,这在这里并不受欢迎。是的,我确实包含了一个触发器,用于根据每个onload侦听器中三个变量的状态调用函数。