Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用xmlhttprequest使用ajax onclick rails更新div_Javascript_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 使用xmlhttprequest使用ajax onclick rails更新div

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();

我使用acts作为可投票的宝石,并在评论中实现了投票系统。现在,当用户单击upvote或downvote链接并更新投票计数器时,我希望页面停止重新加载。我想用这个

<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