我有一個更新面板,其中的定時器控件設置爲每分鐘左右自動檢查一些數據更新。ScriptManager.RegisterStartupScript多次添加腳本塊
如果它看到數據更新,它將被設置爲使用序列化的JSON數據調用本地腳本。
ScriptManager.RegisterStartupScript(UpdateField, GetType(HiddenField), ACTION_CheckHistoryVersion, "updateData(" & data & ");", True)
其中「數據」可能看起來像
{
"someProperty":"foo",
"someOtherProperty":"bar",
"someList":[
{"prop1":"value"},
{"prop2":"value"}, ...
],
"someOtherList":[{},...,{}]
}
「數據」可以得到相當大的,有時甚至只有幾個項目改變。
我遇到的問題是這樣的。每次我將它發送回客戶端時,它都會作爲全新的腳本塊添加並且現有的塊不會被刪除或替換。
輸出看起來是這樣的:
<script type="text/javascript">
updateData({
"someProperty":"foo",
"someOtherProperty":"bar",
"someList":[
{"prop1":"value"},
{"prop2":"value"}, ...
],
"someOtherList":[{},...,{}]
});
</script>
<script type="text/javascript">
updateData({
"someProperty":"foo",
"someOtherProperty":"bar",
"someList":[
{"prop1":"changed"},
{"prop2":"val"}, ...
],
"someOtherList":[{},...,{}]
});
</script>
<script type="text/javascript">
updateData({
"someProperty":"foos",
"someOtherProperty":"ball",
"someList":[
{"prop1":"changed"},
{"prop2":"val"}, ...
]
});
</script>
與正在創建一個新的腳本塊,每次有數據的變化。
隨着時間的推移,瀏覽器上積累的數據量可能會很大,如果我們繼續增加這個數據,我無法想象大多數人的瀏覽器會如何使用它,但我認爲它不會很好。
有誰知道是否有辦法只是將已發回給瀏覽器的代碼替換掉,而不是像這樣連續添加它?
我發現了一個黑客,我編輯了我的問題來顯示它。 – CStroliaDavis
你可以簡單地使用webservice嗎? –
請考慮發佈你的黑客作爲答案,而不是你的問題的更新,因爲這是適當的協議。如果延遲期間沒有更好的事情發生,你甚至會被鼓勵接受你自己的答案。 –