Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 启用pushState后,导航不仅对空片段工作_Javascript_.htaccess_Backbone.js_Marionette_Pushstate - Fatal编程技术网

Javascript 启用pushState后,导航不仅对空片段工作

Javascript 启用pushState后,导航不仅对空片段工作,javascript,.htaccess,backbone.js,marionette,pushstate,Javascript,.htaccess,Backbone.js,Marionette,Pushstate,所以,我有一个主干提线木偶应用程序,完全使用哈希。然后,我决定启用pushState以获得更好的UX URL 我在以下位置访问应用程序: http://localhost:8888/multikanban/app 我应用了以下更改: 启用pushState Backbone.history.start({pushState: true, root: "/multikanban/app/"}); 定义以下.htaccess <ifModule mod_rewrite.c>

所以,我有一个主干提线木偶应用程序,完全使用哈希。然后,我决定启用pushState以获得更好的UX URL

我在以下位置访问应用程序:

http://localhost:8888/multikanban/app
我应用了以下更改:

  • 启用pushState

    Backbone.history.start({pushState: true, root: "/multikanban/app/"});
    
  • 定义以下.htaccess

    <ifModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} !index
        RewriteRule (.*) app/index.html [L]
    </ifModule>
    
    
    重新启动发动机
    重写cond%{REQUEST_FILENAME}-F
    重写cond%{REQUEST_FILENAME}-D
    重写cond%{REQUEST_URI}!指数
    重写规则(*)app/index.html[L]
    
  • 在这一点上,应用程序加载没有问题,我可以四处移动,登录,等等。但是,当调用App.navigate(“”)时(当我需要转到初始应用程序状态时),我得到以下错误:

    Uncaught SyntaxError: Unexpected token <
    
    landing_app.js:15 Uncaught TypeError: Cannot read property 'showLanding' of undefinedlanding_app.js:15 (anonymous function)require.js:1658 context.execCbrequire.js:874 Module.checkrequire.js:1121 (anonymous function)require.js:132 (anonymous function)require.js:1164 (anonymous function)require.js:57 eachrequire.js:1163 Module.emitrequire.js:925 Module.checkrequire.js:1151 Module.enablerequire.js:782 Module.initrequire.js:1178 callGetModulerequire.js:1572 context.completeLoadrequire.js:1679 context.onScriptLoad
    
    require.js:1903 Resource interpreted as Script but transferred with MIME type text/html: "http://localhost:8888/multikanban/scripts/apps/landing/show/show_controller.js".
    
    未捕获的语法错误:意外标记<
    landing_app.js:15未捕获类型错误:无法读取未定义的landing_app.js:15(匿名函数)require.js:1658 context.execCbrequire.js:874 Module.checkrequire.js:1121(匿名函数)require.js:132(匿名函数)require.js:1164(匿名函数)的属性“showland”require.js:57 eachrequire.js:1163 Module.emitrequire.js:925 Module.checkrequire.js:1151 Module.enablerequire.js:782 Module.initrequire.js:1178 callGetModulerequire.js:1572 context.completeLoadrequire.js:1679 context.onScriptLoad
    require.js:1903资源解释为脚本,但使用MIME类型text/html进行传输:http://localhost:8888/multikanban/scripts/apps/landing/show/show_controller.js".
    
    使用App.navigate(“”)时,我只更新URL,错误状态下不应“传输”任何内容

    意见:

  • App.navigate(“”)在使用pushState之前工作
  • 将App.navigate(“”)更改为类似App.navigate(“”)的内容可以使其工作,但当然URL是错误的
  • 注释App.navigate(“”)不会导致应用崩溃,它只是不会更新URL,所以是的,问题应该出在App.navigate(“”)上

  • 如何让App.navigate(“”)工作?为什么该命令显然与服务器交互,它不应该只更新URL和历史记录吗?关于这一点,我在哪里可以询问您的想法呢?

    您收到的错误似乎表明requirejs没有正确映射到您指定的路径。

    好的,所以经过很多努力,我修复了它。显然,这与后面的更改无关,而是与上个月神秘运行的requirejs配置有关:D

    我将index.html中的数据main和src从

    <script data-main="scripts/main.js" src="scripts/vendor/requirejs/require.js"></script>
    
    
    

    
    
    此外,如果有样式,请确保在href中为样式定义绝对路径

    干杯


    感谢@jdaudier的帮助

    如果我评论App.navigate(“”)。如果它工作,show_controller.js将被加载并显示它必须显示的内容。此时URL不会更新。这让我很困惑,App.navigate(“”)应该只是更新URL和历史记录吗?为什么它会影响其他任何东西?您是否尝试过-
    App.navigate('/')
    
    <script data-main="/multikanban/app/scripts/main.js" src="/multikanban/app/scripts/vendor/requirejs/require.js"></script>