我想從一個網絡服務器獲取數據,它必須由不同的功能處理,直到顯示出來。我的問題是,當xmlhttprequest是異步的,那麼處理函數已經被調用,但數據不可用。我如何確保異步調用完成? 我知道readyState和狀態屬性。如果響應需要更長時間,則同步呼叫無助於凍結瀏覽器。我只能使用純JavaScript,處理數據的函數只能稍微改變。如何確保Xmlhttprequest(異步)完成?
編輯:
以下結構是我的問題(抽象,在現實中多個不同版本的情況發生了):
- 功能loadData:不會的XMLHttpRequest(異步)
- 功能A:調用loadData ,先調用
- 函數B:調用loadData,調用第二個
- 函數C:調用A和D以及第一個調用
- 功能d:第一執行一些計算
- 功能:顯示HTML元素基於輸入
- 功能秒:顯示其他HTML元素
實施例的程序運行:
- JS自動調用功能A顯示圖表
- 用戶按下按鈕並調用功能B,顯示不同的圖表
- 用戶按下不同的按鈕調用函數C
問題:(?這可能是由新的參數來識別) 在功能上,功能首先需要的數據,但不能從loadData的onreadystatechange因爲有幾個不同的上下文中被調用例如函數B的調用。
我認爲只有通過更改onreadystatechange中loadData和條件語句的新參數的結構才能實現,然後onreadystatechange會調用需要來自Web服務器的不同函數。不幸的是,在調用另一個函數之前,將包括部分計算或完成的工作(來自函數A,B,C)。這基本上打破了邏輯分離。 是否有任何其他方式在現有代碼中需要更少的更改?
這當然有效。但是一個特定的功能非常棘手。它被在不同情況下調用的幾個函數使用。因爲我認爲沒有簡單的解決方案,但建立了不同的結構 – John
雖然你的回答是正確的,但我想看看在接受之前是否有其他方式可能會有人知道。我不能投票你的答案,因爲我沒有足夠的聲譽。 – John