IE делает дополнительный GET-запрос при изменении хеша

Когда я делаю 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()). Так что хэш меняется естественно. Нет, дополнительный запрос все равно делается.


person katspaugh    schedule 23.01.2012    source источник
comment
Какой именно JavaScript вы используете для изменения хеша?   -  person EricLaw    schedule 24.01.2012
comment
@EricLaw-MSFT-, добавил код к вопросу.   -  person katspaugh    schedule 25.01.2012


Ответы (1)


Посетитель перенаправляется на затронутую страницу с другой? Если да, то, скорее всего, это известная ошибка IE.

Взгляните на этот похожий вопрос: обновление javascript location.hash в IE

person greg84    schedule 23.01.2012
comment
Грег, да, я видел этот вопрос. Это не перенаправление, и решения, представленные в ответах на этот вопрос, не работают для моего случая (я проверял). - person katspaugh; 24.01.2012
comment
Сайт сейчас работает? Можете ли вы поделиться путем к затронутой странице? - person greg84; 24.01.2012
comment
Грег, он еще не запущен. Но могу поделиться кодом. Смотрите обновленный вопрос в ближайшее время. - person katspaugh; 25.01.2012