查询在 ajax 请求中返回旧结果
本文关键字:返回 结果 请求 ajax 查询 | 更新日期: 2023-09-27 18:36:28
在我的部分视图中,我有一个对话框,并渲染了一个花哨的树。从列表框更改事件的视图中,我加载了树。加载树时,我检查缓存是否存在,如果存在,我从缓存中提取,如果不存在,则构建列表并将其添加到缓存中。
缓存本身工作正常,但是将数据拉取到要添加到缓存的列表的方法似乎拉取了较旧的值。由于此方法在此视图上被 ajax 触发,我怀疑问题出在内部,我尝试在控制器操作方法中不设置缓存属性以及发送硬代码缓存破坏参数,但无济于事。
JS 列表框更改事件
$('#SystemID').change(function () {
var userroleid = $("#UserRoleID").val();
// if (userroleid != 1) {
$("#treeview").remove();
$("#partTreeView").remove();
var overlay = $('<div></div>').prependTo('body').attr('id', 'overlay');
$.ajax({
type: 'POST',
url: serviceEntryURL,
cache: false,
datatype: "html",
data: $("#form").serialize(),
success: function (result) {
$("#main").html(result);
overlay.remove();
}
});
});
视图渲染树
<div id="errorCodes">
@Html.RenderTree(CacheHelper.ErrorCodes(@Model.ErrorCodeType), ec => ec.Name, ec => ec.Children.ToList(), ec => (ec.ID).ToString(), Model.ErrorCodes, "error")
</div>
缓存帮助程序
if (HttpRuntime.Cache[cacheKeyRemove] != null)
{
ERRORCODES = (List<Domain.Lists.ErrorCode>)HttpRuntime.Cache[cacheKeyRemove];
}
else
{
**//以下方法 GlobaList.ErrorCodes 没有缓存或任何东西,但它仍然返回较旧的值。**
ERRORCODES = RunLog.Domain.Lists.GlobalList.ErrorCodes(instrumentTypeID);
HttpRuntime.Cache.Add(cacheKeyRemove, ERRORCODES, null, DateTime.Now.AddHours(10), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}
错误代码编辑页面
如果我转到此视图并编辑错误代码并且缓存键已成功删除。当我回到渲染树的视图时,由于此缓存已被删除,它查询上述方法来构建错误代码列表,但我刚刚编辑的值不正确且是旧的。更奇怪的是,如果我将新记录添加到错误代码表并重置缓存,那么新记录会在另一个视图中正确显示。
while (enumerator.MoveNext())
{
if (enumerator.Key.ToString() == cacheKeyRemove)
{
HttpContext.Cache.Remove(enumerator.Key.ToString());
}
}
我遇到过一次这样的错误,这是一个缓存问题。为了解决这个问题,每次我发送一个新的 ajax 请求时,我都会在 url 后面附加一个新的随机数。
希望这对你有帮助。
例如,假设 URL 是:
http://localhost/app1/getData?id=randomNb