当我创建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()
)。这样哈希就会自然地改变。不,无论如何都要提出额外的请求。
答案 0 :(得分:1)
访问者是否被重定向到受影响的页面?如果是这样,它可能是一个已知的IE错误。