-2

1 つの関数で、xmlhttprequests を使用して 3 つのリソースをダウンロードしたいと考えています。それらがロードされたら、前述のリクエストからのレスポンスを使用して関数を呼び出したいと思います。ただし、関数を呼び出そうとすると、必要な前述の応答は定義されていません。

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

コードが機能せず、改造が必要です!

4

2 に答える 2

0

最後の部分: var DDM=Engine({'file':File,'meta':Meta}) return DDM

その時点では、XMLHttpRequests がまだ返されていない可能性があるため、 FileMetaにはまだ何も割り当てられていない可能性があるため、常に未定義になります。つまり、それらの .onload() 関数はまだ呼び出されていないため、ファイル/メタはまだ定義されていません。

あなたがしたいことは onload() の中で、File や Meta をチェックして、それらが定義されているかどうかを確認します (別名、それらの XMLHttpRequests が正常に返されました)。存在する場合は、 Engine({'file':File, 'meta': Meta}) を呼び出すことができます。その時点でそれらが存在するからです。

于 2013-03-06T08:54:23.900 に答える
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);
    }
};
于 2013-03-06T08:57:18.123 に答える