Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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 rails jquery ajax请求未执行_Javascript_Jquery_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Javascript rails jquery ajax请求未执行

Javascript rails jquery ajax请求未执行,javascript,jquery,ruby-on-rails,ruby-on-rails-3,Javascript,Jquery,Ruby On Rails,Ruby On Rails 3,我正在一个应用程序上实现一个向上投票系统,我正在构建一个非常类似于stackoverflow的应用程序。当用户单击upvote或downvote时,会向我的一个控制器发送一个ajax请求,该控制器会更新几个表。完成后,我使用respond_路由到一个js.erb文件,该文件执行jquery来更新用户显示。但是,jquery没有被执行。单击upvote/downvote时,控制器代码会正确执行(我可以在rails控制台中看到),但用户显示不会更新。然而,在刷新时,用户显示将被更新,而不是异步更新。

我正在一个应用程序上实现一个向上投票系统,我正在构建一个非常类似于stackoverflow的应用程序。当用户单击upvote或downvote时,会向我的一个控制器发送一个ajax请求,该控制器会更新几个表。完成后,我使用respond_路由到一个js.erb文件,该文件执行jquery来更新用户显示。但是,jquery没有被执行。单击upvote/downvote时,控制器代码会正确执行(我可以在rails控制台中看到),但用户显示不会更新。然而,在刷新时,用户显示将被更新,而不是异步更新。我知道jquery没有在FireBug控制台中b/c执行,我可以看到我的jquery代码——它只是没有被应用。以下是我的upvote控制器代码:

def upvote
        @post = Post.find(params[:id])

        @user_vote = current_user.votes.where(post_id: @post.id).first
        if @user_vote.blank?
            Vote.create(user_id: current_user.id, post_id: @post.id, vote: 1)
            @post.upvotes += 1
        elsif @user_vote.vote.to_i == 0
            @user_vote.vote = 1
            @post.upvotes += 1
        elsif @user_vote.vote.to_i == 1
            return redirect_to :back, :alert => 'You have already upvoted the post'
        elsif @user_vote.vote.to_i == 2
            @user_vote.vote = 1
            @post.downvotes -= 1
            @post.upvotes += 1
        end

        respond_to do |format|
            if @post.save and @user_vote.save
                format.js { }
            else 
                format.html { redirect_to :back, :alert => 'There was an error in upvoting the post' }
            end
        end

    end 
这是我的upvote.js.erb文件:

$('#post-action-<%= @post.id %>').html("upvote");
// this normally renders a partial (below), but I am rendering "upvote" until I can fix this
// escape_javascript(<%= render :partial => 'post_voting', :locals => { post: @post, user_vote: @user_vote } %>) 

您的代码看起来不错,应该可以执行。您可以执行额外的检查以更新固定id而不是计算id

$('#updateme').html("upvote");
并将此id添加到html中的某个位置。如果这样做有效,那么您可以确定ajax调用完全执行,问题只是您引用的id


你有没有检查过你的html源代码有一个id“post-action-2”?

在处理jquery之后,我注意到了一些事情。首先,我需要缩小我的代码(去掉所有注释和未使用的空格)。我拿了这个:

$('#post-action-<%= @post.id %>').html("upvote");
// this normally renders a partial (below), but I am rendering "upvote" until I can fix this
// escape_javascript(<%= render :partial => 'post_voting', :locals => { post: @post, user_vote: @user_vote } %>) 
$('#post action-').html(“upvote”);
//这通常会渲染一个部分(如下),但我会渲染“upvote”,直到我可以修复它为止
//escape_javascript('post_voting',:locals=>{post:@post,user_vote:@user_vote}%>)
并改为:

$('#post-action-<%= @post.id %>').html("upvote");
$('#post action-').html(“upvote”);
代码正在运行,用户显示正在更新以显示“upvote.”完美。因此,我用以下代码替换了上述代码:

$('#post-action-<%= "#{@post.id}" %>').html("<%= escape_javascript(render :partial => 'post_voting', :locals => { :post => @post, :user_vote => @user_vote }) %>");
$('#post action-').html('post#u voting',:locals=>{:post=>@post,:user#u vote=>@user#vote})%>”;

还有卡波!它起作用了。很高兴解决了这个问题!缩小JQUERY人员的规模

请记住,你没有犯任何错误!
$('#post-action-<%= @post.id %>').html("upvote");
$('#post-action-<%= "#{@post.id}" %>').html("<%= escape_javascript(render :partial => 'post_voting', :locals => { :post => @post, :user_vote => @user_vote }) %>");