url_for 不接受:remote => true
争论,通常是link_to
您将其发送到的方法。
你有什么理由不能让你的<div>
而是一个链接?出于所有意图和目的,它充当链接,因此您应该将其标记为这样,我们称之为语义标记。
如果你真的想这样做,最好使用 jquery(或原型,如果这是你喜欢的)来不引人注目地执行操作......它也使执行 ajax 请求变得更容易。单击链接后,您是否尝试更新页面上的某些内容,或者什么都不做?
'window.location' 也是telling要重定向的页面上的 javascript。如果您想远程发出请求,您就不会使用它。
使用 jquery 你could如果你想坚持使用 div 就这样做
%(function(){
$('#foo').click(function(){
$.get(
url: $(this).data('request-path'),
success: function(data){
alert('success sir! controller responded with ' + data);
}
);
});
});
并在您的视图中使用它:
<div id='foo' data-request-path='<%= url_for foo_controller_path(:someparam => @left) %>'></div>
但如果你将其更改为链接标签,你可以这样做......
= link_to("", url_for(foo_controller_path(:someparam => @left)), :remote => true, :id => 'foo')
它应该可以工作。然后,您可以按照您尝试设置 div 标签样式的方式设置此链接的样式。
这是更多的语义和更少的代码让你担心。如果您之后需要更新 dom 中的某些内容,您可以添加此 jquery (如果您使用的是 jquery 和 Rails3):
$('#foo').bind('ajax:success', function(data){
alert('successful request! data was: ' + data);
});
我不一定测试all但这应该是一个很好的起点...我不太喜欢将 onclick 处理程序放入标签中。当您使用 jquery 绑定事件时,它往往会工作得更好。
如果您希望能够执行我所描述的操作,但您使用的是 Rails 2,则可以从此处获取 Rails3 jquery 脚本:https://github.com/rails/jquery-ujs
请注意,如果您使用 Rails 3 并且想要 jquery 而不是原型(像我一样!),您还需要该脚本。默认情况下,Rails 3.1 将与 jquery 捆绑在一起,而不是我听说的原型。
并改变:remote => true
在那个 url_for 中"data-remote" => true
(对于rails 2,对于rails 3,您可以使用符号语法,它使得'data-remote'
给你的属性。
如果有些事情不太有效或者您需要澄清,请告诉我。或者即使你完全讨厌我的想法:p