【问题标题】:Is there any reason why new data is not rendering是否有任何原因导致新数据未呈现
【发布时间】:2019-09-18 10:34:19
【问题描述】:

我有以下 JQuery 代码:

 $.ajax({
                            url: "/Configuration/TestPlan/GetTestPlanDdlList",
                            type: 'POST',
                            dataType: 'json',
                            // async :false,
                            beforeSend: function () {
                                //call pageloader 
                                showImageLoader();
                            },
                            data:jsonString,
                            contentType: "application/json; charset=utf-8",
                            success: function (data) {
                                data = data.allDDlList;
                                $(".ajaxmask, #imgAjaxLoading").remove();

ASP.net 控制器:

[HttpPost]
var result = Json(new { allDDlList = allDDlList }, JsonRequestBehavior.AllowGet);
            result.MaxJsonLength = Constants.MaxJsonLength;
            return result;

我有几个用户没有看到最新数据的案例。当我让他们清除浏览器缓存并进行硬刷新时,它就可以正常工作了。

对此处可能仍缓存的内容有何建议,以及对确保人们不会获得旧数据的解决方案有何建议?

【问题讨论】:

  • 尝试将 cache: false 添加到 AJAX 请求属性
  • 嘿@Rory 我也试过了,没用。

标签: jquery ajax asp.net-mvc-4


【解决方案1】:

JQuery 的 ajax 请求会缓存结果。在我们的应用程序中处理缓存,将标头设置为 no-cache。

    $.ajaxSetup({
    type: 'POST',
    headers: { "cache-control": "no-cache" }
});

【讨论】:

  • 标头已经通过后端传递并通过元标记设置。这也类似于缓存:false
  • 我现在所做的是将标头中的 max-age 设置为 0,以便每次都将请求作为新请求获取。
【解决方案2】:

我做了更多的测试,我想在这里添加我所做的。到目前为止,我得到了积极的结果。但不能假设用户接下来会执行什么。所以这是我的发现。

我已在 ajax 属性中将缓存设置为 false。然后我在 URL 中添加了一个查询字符串。 我已在请求标头中将 max-age 设置为 0,以便每次单击事件时都会将请求作为新请求获取。

下面是 JQuery 代码:

 var data = {'areaMappingList' :  areaDataSource, 'IsParent': viewBagIsParent};

                        var jsonString = JSON.stringify(data);
                        debugger
                        $.ajax({
                            url: "/Configuration/URL/URL?IsParent="+ viewBagIsParent +"",
                            type: 'POST',
                            cache: false,
                            dataType: 'json',
                            // async :false,
                            beforeSend: function () {
                                //call pageloader 
                                showImageLoader();
                            },
                            data:jsonString,
                            headers: {
                                'Cache-Control':'max-age=0, public'
                            },
                            contentType: "application/json; charset=utf-8",
                            success: function (data) { }

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 1970-01-01
    • 2021-12-01
    • 2021-02-02
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多