【问题标题】:Reloading a page via AJAX when window.location=self.location doesn't work当 window.location=self.location 不起作用时通过 AJAX 重新加载页面
【发布时间】:2010-09-15 22:03:01
【问题描述】:

在我的主页上我得到了:

<ul id="login">
  <li> <a id="loginswitch" href="./login-page">log-in</a> | </li>
  <li> <a id="signupswitch" href="./signup-page">sign-up</a> </li>
</ul>

通过 MooTools,我通过 id 获取这些锚元素,这样一旦单击它们,就会在它们下方弹出一个华丽的 div,其中包含登录或注册表单(当然还有阻止事件传播的方法) 并且在填写完字段后,AJAX 调用就会启动 - 这应该创建一个会话并重新加载页面,以便用户可以看到他现在已经登录并且出现用户级控件等。

ajax 调用由 MooTools AJAX 类发起,evalScripts 选项设置为 true。 AJAX页面返回脚本代码:

<script type="text/javascript">window.location = self.location;</script>

这个系统完美运行 - 现在我想知道为什么如果我将锚的 href 值更改为 href="#" 我的脚本将不再工作?

跟窗户有关系吗?

当我点击一个链接时,它是否改变了它的属性,或者即使事件的传播停止了??

【问题讨论】:

    标签: javascript browser caching reload


    【解决方案1】:

    转到页面上的锚点(# 表示的意思)不需要重新加载。

    【讨论】:

      【解决方案2】:
      window.location = self.location;
      

      此 JavaScript 正在执行

      当它执行时,浏览器被告知将window.location 的值替换为一个新值。 并非所有浏览器都会在此处做出相同的反应。有些可能会按您的预期工作,但其他人会变得聪明并比较这两个值。 浏览器知道它在哪个页面上,并且它知道您只是要求它转到同一页面。

      浏览器缓存

      浏览器甚至在缓存中保存了您当前页面的副本。它可以与服务器对话并询问它在缓存中的页面是否仍然有效。如果缓存有效,它可能决定不强制重新加载页面。在幕后,这发生在 HTTP 标头中。浏览器和服务器可以通过多种方式通过 HTTP 进行通信。在这种情况下,您的浏览器会向服务器发送一个快速请求,内容如下:

      GET /stackoverflow.com/posts/196643/index.html
      HTTP/1.1
      Host: www.stackoverflow.com
      User-Agent: Mozilla/5.0
      If-Modified-Since: Sun, 12 Oct 2008 20:41:31 GMT
      

      这称为条件 GET 请求。通过说 If-Modified-Since,您的浏览器会说:“给我那个文件,但前提是它自我上次看到它以来已经被修改过。”

      长话短说,您没有明确告诉浏览器重新加载页面。

      您可以这样做:

      location.reload( true );
      

      “true”是一个可选参数,用于强制重新加载。浏览器甚至不会查看缓存。它会照你说的做。

      【讨论】:

        【解决方案3】:

        如果他们在工作中交给我这个特别的任务,我会把它踢回设计。除非我们谈论的是安全页面或 OpenID 登录,否则您不应弹出登录或登录表单。用户需要学会在他们的页面顶部寻找那个 https:,如果他们没有看到它就永远不要登录。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-20
          • 1970-01-01
          • 1970-01-01
          • 2017-11-11
          • 1970-01-01
          • 2018-01-06
          • 2013-10-26
          • 2017-11-03
          相关资源
          最近更新 更多