Как я могу избежать двойной подачи с 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);
}
}