在单个函数中,我想使用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
};
代码不起作用,需要进行一些改造!
答案 0 :(得分:0)
最后一部分: var DDM = Engine({'file':File,'meta':Meta}) 返回DDM
总是会产生未定义的,因为此时 File 和 Meta 可能尚未分配任何内容,因为XMLHttpRequests可能尚未返回。换句话说,它们的.onload()函数尚未调用,因此尚未定义File / Meta。
你想要做的是在onload()中,检查File和/或Meta以查看它们是否被定义(也就是说他们的XMLHttpRequests已成功返回)。如果是,那么你可以调用Engine({'file':File,'meta':Meta}),因为那时他们存在。
答案 1 :(得分:0)
我解决了......这并不难......只是一点想象力
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);
}
};