【问题标题】:Ajax request within partial view loaded through another Ajax request does not work properly in IE 11通过另一个 Ajax 请求加载的部分视图中的 Ajax 请求在 IE 11 中无法正常工作
【发布时间】:2017-10-31 12:02:13
【问题描述】:

以下是我的 ASP.NET MVC 应用程序中的确切场景:

父页面有 3 个选项卡,编写以下 javascript 以将点击事件绑定到每个选项卡:

每个函数调用一个控制器动作(在 data-url 属性中指定),并在部分视图中呈现结果,该部分视图预计将显示在“ContactMainContainer”div 中。

    jQuery(document).ready(function () {
    $('#ContactTabs a').on('click', function () {
        var dr = $(this).closest('li');
        var url = $(this).attr("data-url");
        if (url != undefined && url != '') {
            var projectDetailTabModel = $("#ContactID").val();
            $('#successDiv').hide();
            $('#errorDiv').hide();
            $.ajax({
                type: "POST",
                url: getUrlWithTabId(url),
                data: projectDetailTabModel,
                success: function (result) {
                    $('#ContactMainContainer').html(result);
                },
                error: function (errMessage) {
                    if (errMessage != null && errMessage.length > 0) {
                        $("#errorDiv").show();
                        $("#errorText").html(errMessage);
                    }
                }
            });
        }
    });
});

其中一个部分视图的内容是使用 javascripts 构建的(主要是 ajax 调用)。 (由于是客户项目和保密协议,我无法将整个javascript放在这里,并且javascript库太大,无法放在这里)。

问题在于,当用户导航到该特定选项卡(具有 Ajax 调用)时,执行和呈现结果需要很长时间。但在那之后,如果用户点击任何其他选项卡,浏览器就会卡住并无限期挂起。

此问题仅在 IE11 中存在,并且在所有其他浏览器(Chrome、firefox 等)中运行良好。

有人可以建议可能是什么原因吗?

【问题讨论】:

  • IE11 是否在控制台中抛出任何错误?将有助于了解 getUrlWithTabId(url) 的作用。
  • 不,IE 11 不报告任何错误。函数 getUrlWIthTabId(url) 只是构建 URL 并附加 TabId 以为浏览器中的每个选项卡创建唯一的 URL。在调试时,我可以看到这个 URL 是正确的,它也呈现输出,但比平时花费更多的时间。之后,单击任何其他选项卡只会挂起浏览器。
  • 想解释一下为什么这个问题被否决了吗?反对投票者-如果您花一点时间解释一下,它不会让您变得不那么优越。如果你不能,那么不要直接投反对票。由于我在这个问题上付出的努力,我应该得到这里专家的某种讨论/解决方案。

标签: javascript jquery ajax asp.net-mvc internet-explorer


【解决方案1】:

这是一个缓存问题,IE 以缓存而闻名。您需要确保在您的 Ajax 调用中将捕获设置为 false

在 AJAX 调用中设置缓存属性

$.ajax(url, {
    dataType: 'json',
    cache : false,
    //Other things ...
}

我更喜欢在请求URL中使用cache buster,也就是加上当前时间戳作为参数,这样就不能缓存了

【讨论】:

  • 我尝试过使用“cache: false”选项,但结果相同。
  • 检查前请先删除cahce ;) 是否也可以在IE6的开发者工具中检查,点击页面挂起时是否正在发出请求?
  • 页面没有在 IE 6/ 7 中加载.. 很多 java 脚本错误的原因很明显,因为该网站拥有所有新的库和框架:(
  • 但您发布了有关 IE 11 mate 的问题。它现在可以在 IE 11 中使用吗?
  • 我想 - 通过“你也可以签入 IE6 中的开发人员工具”,您希望我签入 IE 6!对不起,这是误解......但是,这在 IE 11 中不起作用。结果相同。挂起
猜你喜欢
  • 2014-11-03
  • 2012-05-10
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
相关资源
最近更新 更多