我想在屏幕/頁面/視圖上顯示進度,就像在控制檯中發生的一樣。所以,當我點擊安裝按鈕,我的「文本區域」控制應該開始像asp.net mvc -view顯示實時進度狀態
連接到數據庫 連接成功 行書a.sql 行書b.sql 操作完成 連接顯示進度關閉
- textarea是否是用於此目的的正確控件?
- 它似乎會有太多的從服務器到客戶端的旅行,只是爲了在屏幕上寫下進度我怎麼能最小化它?
我想在屏幕/頁面/視圖上顯示進度,就像在控制檯中發生的一樣。所以,當我點擊安裝按鈕,我的「文本區域」控制應該開始像asp.net mvc -view顯示實時進度狀態
連接到數據庫 連接成功 行書a.sql 行書b.sql 操作完成 連接顯示進度關閉
對此的一般方法是每秒發送一個ajax請求,並要求從服務器進行更新。
<div>
<pre id="status">
</pre>
</div>
setInterval(function() {
$.ajax("/getUpdate?someParam=1234").then(function (result) {
// result is whatever JSON object you send from the server
$("#status").innerText = result.someProp;
});
}, 1000);
它可能看起來像上面那樣。請注意,它每秒都會執行一次請求,並將來自服務器的消息存儲在pre
元素中。
爲了能夠輕鬆做到這一點,您可以使用SignalR,根據瀏覽器版本選擇最佳通信協議(WebSocket,LongPolling..etc),簡化所用基礎技術的所有麻煩。 。
在SignalR之後,其中一個底層使用的技術是websockets,除了在服務器和客戶端之間保持一個開放的全雙工通道,它不會發送任何內容,以防服務器中的任何更新將此更新推送給客戶端。最受歡迎的網站使用websockets來保持服務器和客戶端之間的開放通道。
SignalR實際上使用websockets,但是它會降級爲使用長輪詢,例如舊的瀏覽器不支持websocket的連接升級。
如果您確信客戶使用新瀏覽器,您可以選擇直接使用websockets。
最後一件事Stackoverflow作爲一個大而重的加載站點,一旦出現新的答案或評論,就會使用websocket進行更新。
對於單個狀態頁面,這通常是矯枉過正。如果你有一個需要不斷收到消息的SPA,那麼我也會推薦SignalR,但是如果你只有短暫的頁面,signalr會帶來很多開銷。 – caesay
底層技術是websockets,它除了在服務器和客戶端之間保持一個開放的全雙工通道外,不會發送任何內容,如果服務器中有任何更新,它會將此更新推送給客戶端。最受歡迎的網站使用websockets來保持服務器和客戶端之間的開放通道。 – msoliman
SignalR實際上使用websockets,但是它會降級以對不支持webscoket連接升級的舊瀏覽器進行長輪詢。作爲一個大而沉重的網站stackoverflow使用websockets更新有一個新的答案或評論。 – msoliman