使用正斜杠在页面加载时出现主干路由错误

时间:2014-11-06 22:22:02

标签: javascript jquery backbone.js

我在Backbone应用程序中设置了一些带有正斜杠的路线:

 app.Router = Backbone.Router.extend({

    routes: {
        'dashboard/:locationId/:product/:year': 'dashboard',
        'bargraph': 'bargraph'
    },
 ....

在准备好文档时,我启动Backbone历史插件,之后,我的路由正常工作,并且函数按照我的预期运行。

 $(function () {
    Backbone.history.start();
});

但是,如果我重新加载包含网址中已有路径的网页,我会收到错误(在Chrome中,但可能还有其他浏览器):

Uncaught Error: Syntax error, unrecognized expression: #dashboard/3/productA/2009 

我只在那里带有正斜杠的路线上出现此错误。我的条形图路径似乎在页面加载时工作正常,没有正斜杠。

我猜这与调用Backbone.history.start函数的时间有关。最简单的解决方案是删除URL中的正斜杠并使用其他一些URL安全分隔符。但它甚至会在页面加载时使用/的URL编码版本。它看起来不太好。

Uncaught Error: Syntax error, unrecognized expression: #dashboard%2F3%2FInVigor 8440%2F2009 

不幸的是,错误来自jQuery的缩小版本,因此我不知道这是一个常见问题还是在网站上一些不起眼的位置发生的特定事件。

有没有人对可能的罪魁祸首提出任何建议?可能的解决方法?

编辑:添加Stacktrace

未捕获错误:语法错误,无法识别的表达式:#spaceboard / 3 / productA / 2009 VM142

    standard.js:2$.error VM142 
    standard.js:2bc VM142 standard.js:2
    bk VM142     standard.js:2
q.querySelectorAll.bk VM142 standard.js:2
$ VM142 standard.js:2p.fn.extend.find VM142 standard.js:2
p.fn.p.init VM142 standard.js:2p VM142 standard.js:2c VM149 BCSUS_scopeScripts_B020D85856E4B758EB7D71EC4F5B7E5F.js:1
(anonymous function) VM149 BCSUS_scopeScripts_B020D85856E4B758EB7D71EC4F5B7E5F.js:1
p.Callbacks.k VM142 standard.js:2
p.Callbacks.l.fireWith VM142 standard.js:2
p.extend.ready VM142 standard.js:2D

它已缩小,但standard.js包含jQuery和其他插件的副本。线条nubmers不是很有帮助,但函数名称可能在某种程度上有所帮助。

1 个答案:

答案 0 :(得分:0)

嗯,我发现了这个问题,它与Backbone路由没有任何关系。网站的某个部分在页面加载时将location.hash送入选择器。的面掌

if (location.hash) {
     ...
       doSomething(location.hash); // <-- feeds into a jQuery selector
    }

function doSomething(id) {
    var container = $(id);
 .....

这是在js app启动之前运行并导致问题。最后的简单解决方案是将其包装在try catch子句中。

感谢Mu和Quince指出这一点。