首页  >  问答  >  正文

javascript - 关于js高级程序中的问题

我在看到javascript高级程序设计(第三版)第492页的时候,有个疑问

当我用了"假"URL以后,刷新了,会返回404错误,除非我在Web服务器上有个真的这样的链接,那用户难免去刷新页面,难道我真的要去搞一个真的文件对应真的链接.那还要这个pushState()有什么用,岂不是很不方便吗

黄舟黄舟2663 天前951

全部回复(4)我来回复

  • 淡淡烟草味

    淡淡烟草味2017-07-05 11:09:56

    pushState主要用在SPA应用中, 回答题主的问题:

    出现404。这是因为PushState模式下的URL里面没有#,浏览器会真的向服务端发起一个请求,而我们在服务端并没有对应于这个路径的资源。

    但是并不需要在服务器上有一个真链接(会把人累死), 只需要更改一下服务器的配置, 让不存在的页面(404)重定向到根路由即可.

    以Tomcat为例,配置非常简单,只要在你的项目的web.xml里面加上以下配置就可以了:

        <error-page>
            <error-code>404</error-code>
            <location>/</location>
        </error-page>

    这样一来,对于找不到资源的路径,Tomcat会全部重定向到根路径上去,这样你的前端框架不论是angular/vue/react/backbone 就可以在前端自己处理请求的URL了。

    对于其它类型的服务端,例如nginx/apache/IIS,请参考这篇文档:https://github.com/angular-ui...

    来源: https://my.oschina.net/mumu/b...

    回复
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-07-05 11:09:56

    按刷新会以当前浏览器的url发请求到服务器。

    例如你通过pushState()把当前地址变成 boomshaklaka.com/boom
    点刷新后服务器收到这个地址发现不存在会返回404的。

    回复
    0
  • 漂亮男人

    漂亮男人2017-07-05 11:09:56

    首先你要理解前端路由跟后端路由的区别。

    在只有后端路由的情况下,你请求的所有页面都是由后端返回给你的,这时所有路由都是由后端控制。

    但有时侯我们不希望刷新页面,但url也想它改变,比如SPA应用。这时候我们就需要一个前端路由,这个pushState在这就起这个作用。

    回复
    0
  • 某草草

    某草草2017-07-05 11:09:56

    首先我还是习惯后台处理路由, 我就以后台路由举例子:

    首先url 可以任意去定义, 至于你想关联项目中的哪个文件, 任意

    <action name="index">
        <result>xxx/index.jsp</result>
    </action>
    <action name="login">
        <result>xxx/index.jsp</result>
    </action>

    可以由不同的action指向同一个页面, 所以你的网站要至少保证有一个页面吧

    其次:

    在 HTML 文件中, history.pushState() 方法向浏览器历史添加了一个状态。

    更多是用来设置一个锚点:

     window.location = "#foo";

    至于文中说的404还是因为路由的指向有问题, 没有找到资源.

    回复
    0
  • 取消回复