不从ajax调用

时间:2017-02-07 18:22:36

标签: jquery html ajax asp.net-mvc asp.net-mvc-5

我正在为我正在开发的项目开发新功能,用户可以一次添加一个或多个条目。步骤如下:

  1. 点击添加年度报告按钮。
  2. Telerik模式窗口会弹出一个状态下拉列表。
  3. 选择实际状态并显示日期选择器(Telerik也)。
  4. 如果您选择了Projected,则会显示开始日期的日期选择器,以及结束年度选择的另一个下拉列表(Projected可以运行多年)。
  5. 为任一选择填写日期字段后,单击“添加”按钮。
  6. 单击“添加”会触发一个命中服务器的ajax方法,该方法会创建新的年度报告列表并将其发送到Session对象。如果一切都成功,它会返回。
  7. 如果成功,则显示表示成功的文本,然后关闭窗口,并使用新报告更新包含年度报告列表的div。
  8. 到目前为止这一切都有效,但是存在问题。当你多次运行时,包含所有年度报告的div都会出错,我的意思是在第一次之后永远不会刷新,或者使用之前的数据。它不会刷新。我已经在我的ajax调用上关闭了缓存,删除了警报,删除了setTimeout实例,删除了div并将其添加回来等等。这似乎都没有刷新div。

    但是,如果我打开IE Developer Tools,它就可以了。我读到IE因使用缓存而臭名昭着,有时这很好,但在这种情况下它不是。

    有没有办法关闭缓存并强制div重新加载?

    以下是我的代码。

    AddARPartialView.cshtml:

    $(document).ready(function () {
        $("#btnAdd").click(function (e) {
            //Stop system from proceeding to server immediately
            e.preventDefault();
    
            //Used for checking Completion
            var success = false;
    
            //Show spinner while system processes page
            //ShowProgress();
    
            //Check to see if there was any validation errors
            ShowValidationErrors();
    
            //There was an error, so do nothing
            if (hasError) {
                //hideprogessbar();
                return false;
            }
    
            //Save Message
            $.ajax({
                type: "POST",
                cache: "false",
                url: "/PM/AddARPartialView",
                dataType: "json",
                data: $('form').serialize(),
                success: function (result) {
                    if (result.success) {
                        //Mark Success as true
                        success = true;
    
                        //Hide the Progress bar and show the success message
                        //hideprogessbar();
                    }
                    else {
                        //Mark Success as false
                        success = false;
    
                        //hideprogessbar();
                        var DetailError = 'Error while creating new Annual Reports.  Please contact administrator with below details.'
                            + '\n' + '\n' + result.Error;
                        $("#lblError").show();
                        $("#lblError").text(DetailError);
                    }
                },
                error: function (xhtr, e, e2) {
                    alert(e + '\n' + xhtr.responseText, 'error', '');
                },
                complete: function () {
                    if (success)
                    {
                        CloseARModal();
                        UpdateAnnualReports();
                    }
                }
            });
        });
    });
    

    常规页面:

    function CloseARModal() {
        var arWindow = $("#AnnualReport").data("tWindow");
        arWindow.close();
    }
    
    function UpdateAnnualReports() {
        //Show spinner while system processes page
        //ShowProgress();
    
        $.ajax({
            type: "GET",
            cache: "false",
            url: "/PM/ARPartialView",
            success: function (result) {
                $("#divARe").html(result);
            },
            error: function (xhtr, e, e2) {
                if (xhtr.status === 401)
                    alert("Session Timeout or Unauthorized to access this webpage");
                else
                    alert(e + '\n' + xhtr.responseText);
            }
        });
    
        //hideprogessbar();
        //alert("New Annual Report(s) added successfully!");
    }
    

1 个答案:

答案 0 :(得分:0)

所以我的脸肯定是红色的尴尬。我想出了这个问题。如果你检查Ajax调用,你会注意到缓存,我把它设置为“false”。它不应该在它周围引用,而只是变得虚假。

我在别人的Ajax电话中注意到了这一点并在我的网站上尝试过。果然,缓存问题立即消失了,哈哈......

令人愤怒的是,经过几天的研究,试验和错误尝试,只是把我的头撞在桌子上浪费了,因为我从前一个承包商那里得到了一个坏榜样。我应该永远记住,如果它看起来很奇怪,请提出质疑,哈哈。