IE 8 показывает необработанный ответ ajax при перезагрузке страницы с помощью jQuery BBQ

Я использую плагины Ben Almans jQuery BBQ и jQuery hashchange для ссылок на страницы. Оба работают должным образом в Opera и Firefox, но не в IE 8 (удивлены, да?). IE также хорошо работает с ajax, кнопкой возврата и hashchange, но не работает, когда я нажимаю кнопку перезагрузки и показывает необработанный ответ ajax вместо запуска его на ранее загруженной странице.

Вот мой уродливый код и некоторые пояснения к функциям, которые я пытаюсь реализовать в моей разбивке на страницы:

1) Ссылки, удобные для поисковых систем (сервер отвечает html или js в зависимости от доступности javascript на стороне клиента).

2) Динамически изменяемый URL-адрес при включении JS (с использованием символа '#').

3) Поддержка истории и кнопки возврата.

4) Минимизация двойных запросов (не выполняйте запросы ajax, если тот же контент был загружен html).

JS:

$(function ($) {
  if (ajax_init) {
    $('.pagination a').live("click", function () {
      $.bbq.pushState({page: $.deparam.querystring($(this).attr('href')).page});
      return false;
    });
    $(window).bind("hashchange", function(e) {
      var anchor = $.deparam.fragment().page;
      var query = $.deparam.querystring().page;
      if (ajax_load(anchor, query)) {
        $(ajax_div).css('opacity', '0.4');
        $(ajax_div + '-processing').removeClass('hidden');
        $.ajax({
          type: 'GET',
          url: $.param.querystring('', {page: anchor}),
          dataType: 'script',
          cache: false
        });
      }
    });
    $(window).trigger('hashchange');
  }
});

function ajax_load(anchor, query) {
  if ((anchor && anchor !== query && !(!query && anchor == 1)) || $('#noscript').length < 1) {
    return true;
  }
  else {
    return false;
  }
}

Шаблон (представление Rails):

<%= render "products_list.erb" %>

Шаблон AJAX (представление Rails js):

$('#products').html('<%= escape_javascript(render "products_list") %>').css('opacity', '1');

UPD: IE не отправляет заголовок типа запроса (или Rails не может его определить) пока освежает. Таким образом, Rails генерирует JS-представление вместо HTML. Решено:

  respond_to do |format|
    request.format.js? ? (format.js {render :index}) : (format.html {render :index})
  end

Есть ли лучшее решение?

5
задан James Allardice 13 February 2013 в 09:25
поделиться