2016-06-29 6 views
0
  • ASP.NET MVC 5
  • jQuery 1.11.3

Apologies für den langen Post, aber ich wirklich einen Schub in der richtigen Richtung, wie ich brauche, kann einfach nicht sehen, was das Problem hier ist.Internet Explorer macht gesamte Ansicht innerhalb eines Teils Update

Folgendes funktioniert perfekt für Chrome, Firefox, aber IE nicht.

das richtige Ergebnis wird wie folgt aussehen:

enter image description here

jedoch in IE 11 das falsche Ergebnis ist wie folgt:

enter image description here

Unter der Haut einige JavaScript es zu tun ist die Aktualisierung mit einigen AJAX-Rückrufen zu einem MVC-Controller:

//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'); 
         }); 
       }); 
     }); 
} 

Das einzige, was ich denken kann ist, dass dies entweder ein Timing-Problem (unwahrscheinlich) ist

EDIT: es, dass endgültig url erscheint: window.location.href ist die Frage, wie in den Browsern funktioniert dies in ich die folgenden AJAX Anfragen sehen:

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

während in IE sehe ich nur diese AJAX-Anfrage (und damit die vollständige Website u pdated im Update-Bereich, da es uns eine ganze Seite Anfrage tun:

https://localhost/departing/australia/cruises

Ich habe auch festgestellt, dass dies kein jQuery.html ist() Ausgabe als described here. Verwenden von Dummy-hartcodierten Strings oder $ ("# container"). Leer(). Append (data); Muster führt immer noch zu dem gleichen schlechten Verhalten des IE.

/EDIT:

Meine grundlegende Frage (n) sind:

  • Wie kann ich diese Arbeit in IE machen (und Chrome, Firefox etc.), ohne die vorhandene JS Logik zu ändern?
  • Habe ich etwas Grundlegendes in Bezug auf jQuery, Promises etc. in Bezug darauf verpasst, wie dies umgesetzt wird, das ist schlechte Praxis?

Alle Hinweise und Vorschläge sehr geschätzt.wobei Ausschaltens Caching für die jQuery AJAX

+0

Warum verwenden Sie 'window.location.href' anstatt' @ Url.Action() '? Und deine URL so zu generieren, wie du es im ersten Anruf tust, ist eine schlechte Übung. Sie sollten auch 'url: @ Url.Action (" currentcruiselistfilterset "," cruises "),' verwenden und die Parameter mit 'data senden: {aBrandId: brandSelected, aCruiseLength: cruiseLengthSelected, usw.}' –

+0

@StephenMuecke Verstanden und vereinbart schlechte Praxis und ich werde meinen Code lokal überprüfen und aktualisieren. Allerdings macht dies keinen Unterschied zu der Tatsache, dass der IE etwas völlig anderes macht als die anderen Browser. Irgendeine Idee, warum IE tut, was es tut? – TheEdge

+0

Sind Sie überrascht, etwas funktioniert anders in IE :). Aber was hast du denn diese angeketteten Ajax-Anrufe? Die erste ruft das 'currentcruiselistfilterset()' auf und du bekommst ein paar Daten zurück (nicht sicher, ob es html oder json ist), aber du tust nie etwas mit diesen Daten (es ist einfach weggeworfen). Dann führen Sie im Erfolgsrückruf einen weiteren Ajax-Aufruf an die URL aus, die von 'location.href' (die URL der aktuellen Seite) zurückgegeben wird, um das DOM zu aktualisieren. –

Antwort

1

Die Lösung hier gelandet ruft so:

$ Schnipsel ({Cache: false;});