例如,我的routes.rb看起来像:
...
get 'abc/xyz' => 'abc#xyz', :as => 'abc_xyz'
...
的application.js:
...
$('a').click(showSpinner);
function showSpinner(evt) {
link = $(this);
evt.preventDefault();
$('body').append('<div class="spinner-overlay"></div>');
setTimeout(function() {
window.location = link.attr('href');
}, 10);
});
...
当使用该JavaScript的链接转到abc_xyz_path时,它会发出ActiveRecord RecordNotFound错误,因为它正在查找id为xyz而不是使用自定义路由的abc记录。但是,如果我删除了setTimeout,则没有问题,它可以工作。 Rails的路由系统是否存在超时问题?
更新
我意识到我不需要preventDefault()或setTimeout(),因为这个点击处理程序会在链接重定向之前发生。问题解决了。
答案 0 :(得分:0)
您的链接在没有javascript的情况下工作的事实表明它指向了正确的URL。在javascript超时后Rails不知道或不关心请求,所以这不是问题。
所以,问题在于您的行:
window.location = link.attr('href');
必须设置错误的网址。你应该这样做:
console.log(link.attr('href'));
检查它的内容,并用它更新您的问题。我不知道link
是什么,但根据您的代码示例,除了window.location = link.attr('href');
我要做的是:
window.location = $(this).attr('href');
$(this)
会提到刚刚收到点击事件的想法,这就是你想要的。
答案 1 :(得分:0)
我意识到我不需要preventDefault()或setTimeout(),因为这个点击处理程序会在链接重定向之前发生。没有更多的问题。