Как я могу избежать двойной подачи с pushState и $.ajax(hash) в браузерах не IE?

Похоже, что Internet Explorer является единственным крупным браузером, который не поддерживает pushState для обработки истории представлений AJAX. Так везде у меня есть

$.bbq.pushState(hash);

в моем коде AJAX я должен добавить еще одну строку:

$.ajax(hash);

Это, конечно, вызывает двойную отправку во всех браузерах, отличных от IE, которые поддерживают отправку через pushState().

Что я могу сделать, чтобы избежать этих двойных представлений?

1 ответ

Решение

Просто позвони $.ajax(hash); в условном выражении, только если history.pushState изначально не поддерживается

if (!history.pushState) {
   $.ajax(hash);
}

Я также предлагаю провести рефакторинг вашего кода, используя уникальную функцию-обертку, принимающую хэш в качестве параметра с необходимой логикой, например

var pushStateWrapper = function(hash) {

    if (!history.pushState) {
       $.ajax(hash);
    }
    else {
       $.bbq.pushState(hash);
    }
}
Другие вопросы по тегам