Javascript 正斜杠加载页面时主干路由错误

Javascript 正斜杠加载页面时主干路由错误,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我在主干应用程序中设置了一些带有前斜杠的路由: app.Router = Backbone.Router.extend({ routes: { 'dashboard/:locationId/:product/:year': 'dashboard', 'bargraph': 'bargraph' }, .... 在文档准备就绪时,我启动主干历史插件,然后,我的路由正常工作,函数按预期运行 $(function () { Backbo

我在主干应用程序中设置了一些带有前斜杠的路由:

 app.Router = Backbone.Router.extend({

    routes: {
        'dashboard/:locationId/:product/:year': 'dashboard',
        'bargraph': 'bargraph'
    },
 ....
在文档准备就绪时,我启动主干历史插件,然后,我的路由正常工作,函数按预期运行

 $(function () {
    Backbone.history.start();
});
但是,如果重新加载URL中已有路由的页面,则会出现错误(在Chrome浏览器中,但也可能在其他浏览器中):

我只在有正斜杠的路由中得到这个错误。我的条形图路径在页面加载时似乎运行良好,没有正向斜杠

我猜这与调用
主干.history.start
函数的时间有关。最简单的解决方案是去掉URL中的前斜杠,并使用其他URL安全分隔符。但它甚至在页面加载时使用URL编码的
/
版本来中断。而且它看起来不太好

Uncaught Error: Syntax error, unrecognized expression: #dashboard%2F3%2FInVigor 8440%2F2009 
不幸的是,这个错误来自jQuery的一个简化版本,所以我不知道这是一个常见的问题,还是在网站上某个不知名的地方发生的特定问题

有人对可能的罪犯有什么建议吗?可能的解决办法

编辑:添加Stacktrace

未捕获错误:语法错误,无法识别的表达式:#dashboard/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和其他插件的副本。行NUBMER不是很有用,但函数名可能在某种程度上是有用的

我发现了这个问题,它与主干路由无关。在页面加载时,站点的某个部分正在将
location.hash
输入选择器面部手掌

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

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

doSomething(location.hash);//控制台中此错误的调用跟踪是什么样子的?堆栈跟踪中的
q.querySelectorAll
不表明jQuery在试图解析选择器时引发了错误吗?有没有可能在jsfiddle.net上重现此问题?我觉得这不像主干路由器问题。你能创建一个fiddle吗?谢谢@mu太短了。这是一个错误的jQuery选择器在页面加载时抓取哈希。不是主干路由问题。
if (location.hash) {
     ...
       doSomething(location.hash); // <-- feeds into a jQuery selector
    }

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