只有 IE 11 有时会失去对 ajax 调用的关注 ASP.NET MVC4

Only IE 11 losing focus on ajax call sometimes ASP.NET MVC4

我正在使用 boostrap 对话框拉入一个包含数量的列表。提交表格后,打开对话框查看数量是否更新,似乎是过时的数据。我用 ajax 呼叫控制器,然后返回数据库以获取更新的信息。但是当我在控制器(在服务器端)中设置断点时,它永远不会命中。当我在开发人员工具和调试器中为调用 ajax 的函数设置断点时,它只会解决问题。我也没有看到任何控制台错误。

我对 Firefox 没有问题,只有 IE11.. 这是代码:

<script type="text/javascript">
    function LocationModal() {

        $("#GetLocBtn").attr("disabled", "disabled");
        var partNumber = $("#PartNum").val();
        var Condition = 'Z';
        var urlQry;
        var receiveIsChecked = document.getElementById('Receive').checked;

        var src = 'removed for security';
        $.ajax({
            type: "GET",
            url: src,
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: { partNumber: partNumber, CCODE: Condition },
            beforeSend: function () {
            },
            success: function (data) {                     
              $("#LocationModalContainer").html(data.LocationModal);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
            }
        });
    };

问题确实是 IE 缓存了 Ajax 调用的结果。您可以通过向每个调用添加 cache: false 来防止这种行为,就像您发现的那样,或者在进行任何调用之前通过 ajaxSetup 全局设置它。

$.ajaxSetup({
    cache: false
});

jQuery documentation 中不鼓励使用 ajaxSetup,但如果您不使用任何可能依赖于正常行为的插件并且想要快速确保 none 您自己的 ajax 调用被缓存。

就个人而言,我怀疑文档中提到的缓存设置的干扰风险有多真实,因为基本上你只是让 IE 像其他浏览器一样运行。