处理并发的xmlhttprequest
Handling Concurrent xmlhttprequests
在一个函数中,我想使用xmlhttprequest下载三个资源;加载后,我想使用上述请求的响应来调用一个函数。然而,当我尝试调用该函数时,所需的上述响应是未定义的。
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 =引擎({"文件":文件,"元":元})返回DDM
将总是产生undefined,因为在这一点上,File和Meta可能还没有被分配任何东西,因为xmlhttprequest可能还没有返回。换句话说,它们的.onload()函数还没有被调用,因此File/Meta还没有被定义。
你要做的是在onload()中,检查File和/或Meta,看看它们是否被定义(也就是它们的XMLHttpRequests已经成功返回)。如果是,那么你可以调用Engine({'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);
}
};
相关文章:
- XMLHttpRequest未返回值-状态202
- XMLHttpRequest在移动设备上的chrome上不起作用
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 检查xmlhttprequest问题的消息
- 主线程上的同步XMLHttpRequest已弃用
- 如何定期发出xmlhttprequest
- javascript第三个XMLHttpRequest被拒绝.但前两个是允许的
- 上传带有XMLHttprequest的文件-多部分/表单数据中缺少边界
- 对象#<XMLHttpRequest>没有方法'完成'
- 在XMLHttpRequest之后重新初始化jQuery
- 如何将GreaseMonkey中的XMLHttpRequest延迟到目标页面加载完成
- Javascript XMLHttpRequest——只有第一个POST请求有效
- XMLHttpRequest - difference between Chrome & Firefox
- IE上的新XMLHttpRequest()出现JS Ajax未指定错误
- 非常简单的XMLHttpRequest不起作用
- 如何使用XMLHttpRequest下载文件
- XMLHttpRequest在$.ajax工作的地方给出了CORS错误
- XMLHttpRequest.open()AJAX中的参数url
- XMLHTTPRequest脚本中没有internet连接和超时
- 为什么当async标志设置为false时,xmlhttprequest中的代码可以工作,而当它设置为true时却不能工作