4

当我发出 XMLHttpRequest 时,我也会更改window.location.hash.

例如,mysite.com/gallery/q#1变成mysite.com/gallery/q#2

发生这种情况时,正如 Fiddler 和 nginx 日志所示,IE8 会向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设置为HTML 中的#1,#2​​ 等等(并删除e.preventDefault())。让哈希自然变化。不,无论如何都会提出额外的请求。

4

1 回答 1

1

访问者是否从另一个页面被重定向到受影响的页面?如果是这样,它很可能是一个已知的 IE 错误。

看看这个类似的问题:javascript location.hash refresh in IE

于 2012-01-23T14:48:43.147 回答