【问题标题】:$.getJSON back button showing JSON return data not the page$.getJSON 返回按钮显示 JSON 返回数据而不是页面
【发布时间】:2010-01-10 14:36:01
【问题描述】:

我的网站有点问题。我有一个托管谷歌地图的页面。然而,在用户单击按钮之前,地图不会显示。然后它调用 $.getJSON 来获取我需要在地图上显示的地址...

$.getJSON(theurl, function(json) {
  ...
}

一切正常。但是,如果用户随后移动到不同的页面,然后单击“后退”按钮,他们会从显示的 $.getJSON 调用中获取数据,而不是页面本身。

就好像获取地址的调用已成为浏览历史记录的一部分。如果用户在数据出现整页时点击刷新,则会显示。

谁能告诉我如何阻止这种情况发生。

我在 ASP.Net MVC 站点中使用 googlemap。

谢谢

【问题讨论】:

  • 你在修改浏览器的历史记录吗?
  • url和页面一样吗? (即,根据请求是否被视为 xhr,在 html 和 json 之间切换)
  • 您好,感谢您的回复。我没有更改历史记录,是的,URL 是相同的,但我检查它是否是服务器代码中的 ajax 请求,所以我知道要提供 json 数据而不是页面。

标签: javascript jquery asp.net asp.net-mvc


【解决方案1】:

我通过在 $.ajax 函数之前包含以下代码解决了这个问题

$.ajaxSetup({ cache: false });

有效!试试看

【讨论】:

  • 这个调用改变了页面上所有对 ajax 调用的行为。如果您不知道,这可能会导致一些非常混乱的行为。
【解决方案2】:

这对我有用,并且与 Rails 控制器配合得很好:

$.getJSON(url, {format: 'json'}, successHandler);

作为奖励,我可以保留缓存。

我很确定这与cache: false 的工作原理相同——两者都向 url 添加了一个参数,这样 Chrome 就不会被来源混淆。在这种情况下,虽然我可以缓存结果,这很好。

【讨论】:

    【解决方案3】:

    这实际上是a bug in Chrome。我通过在 AJAX 调用的 URL 中附加一些内容来修复它,因此它与页面 URL 不同(例如 '&ajax=true')。

    所以在你的情况下它看起来像:

    $.getJSON(theurl + '&ajax=true', function(json) {
      ...
    }
    

    (当然,您需要检查“?”以及查询字符串中没有的内容,但这说明了这一点。

    【讨论】:

    猜你喜欢
    • 2018-08-27
    • 2020-11-08
    • 1970-01-01
    • 2013-07-16
    • 2018-12-07
    • 2019-08-11
    • 2013-04-11
    • 2020-05-12
    • 2017-11-03
    相关资源
    最近更新 更多