Internet Explorer在部分更新中呈现整个视图

时间:2016-06-29 03:01:21

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

  • ASP.NET MVC 5
  • jQuery 1.11.3

为长篇文章道歉,但我真的需要在正确的方向上轻推,因为我无法看到这里的问题。

以下适用于Chrome,Firefox,但IE并不适用。

CORRECT结果将如下所示:

enter image description here

然而,在IE 11中,错误的结果如下:

enter image description here

在皮肤下有一些JavaScript用MVC控制器的一些AJAX回调进行更新:

//Applies the selected filter from the values selected in the drop down
function ApplyFilter() {
    var brandSelected = $('#filterBrand').val();
    var cruiseLengthSelected = $('#filterCruiseLength').val();
    var departureDateSelected = $('#filterDepartureDate').val();
    var departureFromSelected = $('#filterDepartFrom').val();
    var regionSelected = $('#filterRegion').val();
    var shipSelected = $('#filterShip').val();

    cruisesTemplate.UiBlock('.entire-page');
    cruisesTemplate.UiSetBusy('.entire-page');

    $.ajax({
        url: '/cruises/currentcruiselistfilterset?' +
            'aBrandId=' +
            brandSelected +
            '&aCruiseLength=' +
            cruiseLengthSelected +
            '&aDepartureDate=' +
            departureDateSelected.replace(' ', '_') +
            '&aRegionHierarchyItemId=' +
            regionSelected +
            '&aDepartureFromHierarchyItemId=' +
            departureFromSelected +
            '&aShipId=' +
            shipSelected
    })
        .error(function (xhr, status, error) {
            cruisesTemplate.UiClearBlock('.entire-page');
            cruisesTemplate.UiClearBusy('.entire-page');
        })
        .success(function (data) {
            $.ajax({
                dataType: 'html',
                type: 'GET',
                url: window.location.href
            })
                .error(function (xhr, status, error) {
                    cruisesTemplate.UiClearBlock('.entire-page');
                    cruisesTemplate.UiClearBusy('.entire-page');
                })
                .success(function (data) {
                    $('#results').html(data);

                    //Now refresh the filter bar
                    $.ajax({
                        dataType: 'html',
                        type: 'GET',
                        url: '/cruises/filterbarrefresh'
                    })
                        .error(function (xhr, status, error) {
                            cruisesTemplate.UiClearBlock('.entire-page');
                            cruisesTemplate.UiClearBusy('.entire-page');
                        })
                        .success(function (data) {
                            $('#filter-bar').html(data);
                            cruisesTemplate.UiClearBlock('.entire-page');
                            cruisesTemplate.UiClearBusy('.entire-page');
                        });
                });
        });
}

我唯一能想到的是,这可能是一个时间问题(不太可能),也可能是与 url:window.location.href (更有可能)相关的时间问题造成这个问题。

修改 看来肯定是 url:window.location.href 是问题,就像在其中使用的浏览器一样,我看到以下AJAX请求:

  

https://localhost/cruises/filterbarrefresh   https://localhost/departing/australia/cruises   https://localhost/cruises/currentcruiselistfilterset?abrandid=8&acruiselength=0&adeparturedate=january_2015&aregionhierarchyitemid=1&adeparturefromhierarchyitemid=73&ashipid=0

而在IE中,我只看到这个AJAX请求(因此在更新区域内更新完整网站,因为我们正在执行整页请求:

https://localhost/departing/australia/cruises

我还验证了这不是jQuery.html()问题described here。使用虚拟硬编码字符串或$("#container")。empty()。append(data);模式仍会导致相同的IE不良行为。

/编辑:

我的基本问题是:

  • 如何在不更改现有JS逻辑的情况下在IE(以及Chrome,Firefox等)中使用此功能?
  • 我是否错过了jQuery,Promises等方面的基本内容,以及如何实施这些不好的做法?

非常感谢所有指针和建议。

1 个答案:

答案 0 :(得分:1)

这里的解决方案最终关闭了jQuery AJAX调用的缓存,所以:

$ .ajax({cache:false;});