【问题标题】:Handling Concurrent xmlhttprequests [closed]处理并发 xmlhttprequests [关闭]
【发布时间】:2013-02-20 22:13:03
【问题描述】:

在单个函数中,我想使用 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
};

代码不起作用,需要一些改造!

【问题讨论】:

  • Stack Overflow 用于提出编程问题,而不仅仅是要求人们为您修复您的代码。
  • 也许你必须改造你的符号学......它们看起来太紧了
  • 请添加有关“代码不起作用”的详细信息。还要尝试使您的代码更加一致(变量名大写,使用分号) - 当前示例显示您缺乏努力,这在这里并不完全受欢迎。

标签: javascript xmlhttprequest


【解决方案1】:

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

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

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

【讨论】:

  • 是的,我确实包含了一个触发器,用于根据每个 onload 侦听器中三个变量的状态调用函数。
【解决方案2】:

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

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);
    }
};

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2012-11-06
    • 2021-05-03
    • 2018-09-10
    • 1970-01-01
    • 2012-02-24
    • 2011-01-11
    • 2017-08-20
    相关资源
    最近更新 更多