Javascript 使用xmlhttprequest使用ajax onclick rails更新div
我使用acts作为可投票的宝石,并在评论中实现了投票系统。现在,当用户单击upvote或downvote链接并更新投票计数器时,我希望页面停止重新加载。我想用这个Javascript 使用xmlhttprequest使用ajax onclick rails更新div,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,我使用acts作为可投票的宝石,并在评论中实现了投票系统。现在,当用户单击upvote或downvote链接并更新投票计数器时,我希望页面停止重新加载。我想用这个 <script> function loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest();
<script>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","URL_HERE",true);
xmlhttp.send();
}
</script>
谁能告诉我怎么做 通过更简单的
$实现,您可以轻松简化xhr
的使用。ajax
或内置rails:
我将解释如何使用标准的$获得您想要的东西。ajax
(将展示它的工作原理):
$.ajax
#app/assets/javascripts/application.js
$("#vote_button").on("click", function() {
$.ajax({
url: "your/vote/url",
data: {data: "info"},
success: function(data) { alert(data) }
error: function(data) { alert(data) }
});
});
要直接回答您的问题,必须将您使用的url
发送到触发投票操作的控制器方法
我对这个特殊的gem没有任何经验,但我将详细介绍如何手动创建此功能,让您了解:
路线
#config/routes.rb
resources :pictures do
get :vote_up
get :vote_down
end
控制器
#app/controllers/pictures_controller.rb
def vote_up
@picture = Picture.find(params[:id])
#create "up" vote here
respond_to do |format|
format.js #loads vote_up.js.erb
end
end
def vote_down
@picture = Picture.find(params[:id])
#create "down" vote here
respond_to do |format|
format.js #loads vote_down.js.erb
end
end
Div
通过在
.js.erb
文件中部署代码,或者在ajax success
函数中部署代码,您可以更新渲染的DIV您必须使用XHR还是可以使用jQuery
($.ajax
)?对我来说,任何可以工作的东西都很好…我甚至使用railscasts视频使用rack pjax…但无法让它工作谢谢-让我在几分钟内写下答案不使用Rails内置ajax设施有什么特殊原因吗@scaryguy你能告诉我我必须用什么来代替appendTo来简单地用更新的投票计数来更新comments div吗?appendTo正在旧评论下添加带有更新投票的相同评论…两者同时存在…在这1小时内,我在这个问题上取得了一些进展…您提到的部分已经实现了…我现在坚持的是我创建了两个文件'upvote.js.erb'和'downvote.js.erb',我正在使用'$(“#comment”)。替换为(“@comment)%>”);'在他们里面。它不起作用。如果我使用append,它只会在旧评论下面添加更新的评论…你能告诉我用什么来代替append或replacewith吗?确切地说,我试着遵循更新的方法。他们使用了append,这对于comment div是必需的。但是为了简单地刷新或更新完整div,用什么来代替append呢?replacewith或html未给出预期结果好的,我建议使用(使用标准JS中的函数)。你能解释一下从.html
命令中看到的“意外结果”是什么吗?我已经问了一个问题。这是链接
#config/routes.rb
resources :pictures do
get :vote_up
get :vote_down
end
#app/controllers/pictures_controller.rb
def vote_up
@picture = Picture.find(params[:id])
#create "up" vote here
respond_to do |format|
format.js #loads vote_up.js.erb
end
end
def vote_down
@picture = Picture.find(params[:id])
#create "down" vote here
respond_to do |format|
format.js #loads vote_down.js.erb
end
end