IE 对哈希更改发出额外的 GET 请求

Posted

技术标签:

【中文标题】IE 对哈希更改发出额外的 GET 请求【英文标题】:IE makes extra GET-request on hash change 【发布时间】:2012-02-16 12:57:21 【问题描述】:

当我发出 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()
)

我还尝试了这些linkshref 属性设置为html 中的#1#2 等等(并删除了e.preventDefault())。让哈希自然变化。不,无论如何都会提出额外的请求。

【问题讨论】:

您用于更改哈希的确切 javascript 是什么? @EricLaw-MSFT-,将代码添加到问题中。 【参考方案1】:

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

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

【讨论】:

格雷格,是的,我见过这个问题。这不是重定向,该问题的答案中提供的解决方案不适用于我的情况(我检查过)。 网站现在上线了吗?你能分享受影响页面的路径吗? 格雷格,它还没有上线。不过,我可以分享代码。很快就会看到更新的问题。

以上是关于IE 对哈希更改发出额外的 GET 请求的主要内容,如果未能解决你的问题,请参考以下文章

SVG 无法在 IE 中正确缩放 - 有额外的空间

SVG 在 IE 中无法正确缩放 - 有额外的空间

Alamofire发布请求错误调用中的额外参数“方法”

Rails 在补丁请求的参数列表中添加了一个额外的参数

如何使用 vue-resource 添加额外的标头来发布请求?

如何获取IE发出的HTTP请求头