Когда я делаю XMLHttpRequest, я также меняю window.location.hash
.
Например, mysite.com/gallery/q#1
становится mysite.com/gallery/q#2
.
Когда это происходит, IE8, как показывают журналы Fiddler и nginx, делает этот странный дополнительный запрос к mysite.com/gallery/
(то есть 404).
Страница не перезагружается, это похоже на XMLHttpRequest.
GET http://mysite.com/gallery/ HTTP/1.1
Accept: */*
Referer: http://mysite.com/gallery/q
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)
Accept-Encoding: gzip, deflate
Host: mysite.com
Connection: Keep-Alive
Отдельно изменение хэша или Ajax-запрос не вызовет этот дополнительный запрос.
Еще одно замечание — лишний запрос возникает не при каждом Ajax-запросе. Это происходит, казалось бы, случайно.
Может ли это быть неправильной настройкой nginx? Или это просто одна из многих ошибок IE8?
Есть ли обходной путь? Мне не нужна эта дополнительная нагрузка.
Обновлять
Вот код Ajax ($
означает jQuery):
var id = link.getAttribute('data-id')
var xhr = $.ajax({
cache: false,
url: '/stock-items',
method: 'GET',
data: { id: id },
dataType: 'json'
})
xhr.success(function (data) {
if (currentId === id) {
toggleLoader(false)
displayData(data)
}
})
И код манипулирования хешем:
function setHash(link) {
var index = $(link).index()
globals.location.hash = index + 1
}
Также пробовал с хэш-символом с тем же результатом:
globals.location.hash = '#' + index + 1
Ajax-запрос выполняется при переходе по ссылке на изображение в галерее:
links.on('click', function (e) {
setHash(this)
loadData(this)
e.preventDefault()
})
Я также попробовал эти links
, чтобы атрибут href
был установлен в #1
, #2
и т. д. в HTML (и удалил e.preventDefault()
). Так что хэш меняется естественно. Нет, дополнительный запрос все равно делается.