我有以下JavaScript模式。我試圖運行「getDataTwo」,只有在「getDataOne」完成後才能運行。這意味着XMLHttpRequest必須返回所有數據。我一直在四處尋找,我發現信息。回調和超時以及承諾。我不明白答案或解釋不符合我的特定代碼模式(我無法理解答案)。XMLHttpRequest:運行多個
當我這樣做: getDataOne(getDataTwo());
我得到了與上述不一致的結果,因爲XMLHttpRequest在下一個開始之前尚未啓動。所以每個人都試圖在對方的頂部工作 - 或多或少。
,當我嘗試這樣的事: this.getDataOne(函數(){ this.getDataTwo(); }); 這是一個微弱的回調嘗試(我認爲),只有一個函數往往會運行。
所以 - 我的問題 - 我怎樣才能可靠地讓'getDataTwo'只在整個'processRequest'從'getDataOne'調用完成時才運行?
請注意,我不想使用定時器功能(例如,只能在3秒後運行)。因爲,誰在說這段特定的字符串有多長。
下面的代碼模式:
this.getDataOne = function() {
myURL = this.returnURL();
var xrRW = new XMLHttpRequest();
this.processRequest(apiGSS, xrRW, myURL);
} // end: getDataOne
this.getDataTwo = function() {
myURL = this.returnURL();
var xrRW = new XMLHttpRequest();
this.processRequest(apiGSS, xrRW, myURL);
} // end: getDataTwo()
this.processRequest = function(iAPI, xReq, strCommand) {
xReq.onreadystatechange = function() {
if (xReq.readyState === 4) {
if (xReq.status === 200) {
// parse JSON data...
Do JSON work here
// write parsed data to screen...
// by calling a function and sending it the parsed JSON data
writeToScreen(arrayofJSONData());
} // end: xReq.readyState === 200
} // end: xReq.readyState === 4
} // end: onreadystatechange
xReq.open("GET", strCommand, true);
xReq.send(null);
} // end: processRequest
我不知道是什麼與「if(onSuccess){onSuccess();}」。當我添加了所有建議的改變(除了我沒有推薦XHR對象 - 我會在稍後做...),只有getDataTwo運行... getDataOne不運行,即使這是所謂的主程序。 –