我有一个带有计时器控件的更新面板,它设置为每分钟左右自动检查一些数据更新。
如果它看到数据更新,则设置为使用序列化的 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>
每次数据发生变化时都会创建一个新的脚本块。
随着时间的推移,如果我们继续添加它,浏览器上累积的数据量可能会变得巨大,我无法想象大多数人的浏览器会如何接受它,但我认为它不会是好的。
有谁知道是否有办法只替换已发送回浏览器的代码,而不是像这样连续添加它?