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)
问题实际上是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)