2014-05-04 22 views
-1

我有一個同步API來調用當前使用XMLHttpRequest實現的服務器(HTTP GET)。與javascript同步http接口

的API做緩存,並在有高速緩存不被認爲是太舊了,從緩存返回並調用服務器的異步刷新緩存。

有時緩存不可用或太舊,然後API將同步調用服務器返回結果給調用者之前獲取的精確值。

結果將包含一個布爾成功標誌與有效載荷和客戶把手沿着望着該標誌相應的結果。

有兩個問題,我可以看到這樣做; 當緩存不可用並且服務器無法訪問或應答較慢時,我想調出一個微調,以便用戶知道我們正在等待服務器。 另外我想設置一個超時值,我們中止服務器請求並相應地處理錯誤。

似乎我應該能夠使用setTimout操作,但我沒有成功。 最好我想保持客戶端完好(不要將API更改爲異步)。

有沒有辦法做到這一點?

+2

同步AJAX是一個非常糟糕的主意。 – plalx

+0

是的,所以我需要改變它。有什麼建議嗎?要清楚的是,接口(我的代碼)應該是同步的,但實現需要是異步的,否則我將重新設計客戶端以一路使用異步。看看我的選擇。 – daljian

+0

「同步」的阻塞部分是壞事。改變這種情況的唯一方法是使用異步JAX,這導致異步接口。重新設計客戶端爲異步也不是一個壞主意。 – Bergi

回答

0

通過維護從服務器異步獲取的緩存,使同步API響應。 緩存受到寬限期的保護,在寬限期內我們不從服務器獲取新值以避免錘擊服務器。

在大多數情況下,這足以斷言總是有可能被提供給客戶端緩存值。

對於我們有拉新的數據最好的解決辦法是去完全異步的少數情況下,這也是更新客戶端代碼。

目前是不是一種選擇,所以除了上述心跳機制已經到位即切換聯機/脫機狀態,以防止下線時試圖同步拉。