Chrome中的JSON破解按钮,IE中的重新加载按钮(显示为裸数据)

Bea*_*rtz 7 ruby jquery internet-explorer google-chrome ruby-on-rails

在任何事情之前:$ .getJSON后退按钮显示JSON返回数据而不是页面没有帮助,以及https://groups.google.com/group/angular/browse_thread/thread/3787ad609c0beb77/eb1b57069dab9f63没有,互联网也没有没有帮助.

这是问题所在:

我在一个页面中调用一个url来获取json数据,然后在同一页面内使用jquery模板进行渲染.

想象一下,我们在http://someurl.com/search页面上,我们正在开始这样的请求

$.ajax({
  url: '/searchthis', //important, this is NOT THE SAME URL
  cache: false,
  type: 'GET',
  headers: {
    "Accept": "application/json",
  },
  dataType: 'json'
  success: function(data) {
    doSomethingWithResults(data);
  }
});
Run Code Online (Sandbox Code Playgroud)

Rack响应将缓存控制标头设置为无缓存:

Cache-Control:no-cache
Run Code Online (Sandbox Code Playgroud)

一切正常,但如果您将页面留在Chrome中的另一个页面,然后按后退按钮,您将看到裸JSON数据.在IE8中点击重新加载按钮时会出现相同的行为.如果您只需按下地址栏中的网址,则两者都可以正常工作.

我没有得到如何解决这个问题,因为Chrome家伙不会这样做(请参阅http://code.google.com/p/chromium/issues/detail?id=108425)

在我看来,似乎是在浏览器方面的误解,因为它缓存了它真正不应该的东西(响应Header)并且它在错误的URL下缓存了某些东西(因为JSON请求没有达到相同的URL)

Bea*_*rtz 6

问题实际上是Rails:Chrome和IE都要求最后一个没有特定格式的响应,所以Rails只接受第一个响应块,在我的情况下碰巧是json.将html块放在json块前面解决了这个问题.

respond_to do |format|
  format.html { ... } //important because the request comes with no specific format
  format.json { ... }
end
Run Code Online (Sandbox Code Playgroud)