IE делает дополнительный GET-запрос на изменение хеша - PullRequest
4 голосов
/ 23 января 2012

Когда я делаю XMLHttpRequest, я также изменяю window.location.hash.

Например, mysite.com/gallery/q#1 становится mysite.com/gallery/q#2.

Когда это происходит, IE8, как журналы Fiddler и nginxshow, делает этот странный дополнительный запрос на 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-request не вызовет этот дополнительный запрос.

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

1 Ответ

1 голос
/ 23 января 2012

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

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

...