使用ajax回发到同一页面

时间:2014-01-29 22:49:13

标签: javascript jquery ruby-on-rails ruby ajax

我想将ajax请求的结果发回给它所请求的同一页面。以下是相互作用的部分:

Jquery中的AJAX

var ids = 1

$(document).ready(function(){
$('#showbtn').on('click', function() {
    $.ajax({
        url: "http://localhost:3000/teamplayers.json",
        data: {'resolution':ids}, 
        type:"post",
        dataType: "json",
        cache: true,
        success:function(){ 
            $('#test3').val(1);
            alert("test 3"); 
            },
        error: function(error) {
                   alert("Failed " + console.log(error) + " " + error)
                   }           
        });
    });
});

这应该在这里设置一个变量: Teamplayer Controller

# GET /teamplayers
# GET /teamplayers.json
def index
  @teamplayers = Teamplayer.all
  @fteams = Fteam.all
  @teamplayer2 = 1
  tid = params[:resolution] <-It should set here per the data section above
  @ids = tid
end

不幸的是它调用了同一控制器的这一部分

 # POST /teamplayers
 # POST /teamplayers.json
 def create
   @teamplayer = Teamplayer.new(teamplayer_params)

   respond_to do |format|
     if @teamplayer.save
       format.html { redirect_to @teamplayer, notice: 'Teamplayer was successfully created.' }
       format.json { render action: 'show', status: :created, location: @teamplayer }
    else
       format.html { render action: 'new' }
       format.json { render json: @teamplayer.errors, status: :unprocessable_entity }
    end
  end
end

那么我怎么做才能让它发布到同一页面。

1 个答案:

答案 0 :(得分:0)

您正在POST使用ajax,这意味着create操作将被点击,而不是index操作。当您点击页面时,您应该能够在服务器日志输出中看到这一点。

如果您想点击index操作,则需要使用分辨率数据集执行GET ajax请求,以便获取所需的数据。

此外,如果它实际上是动态数据,您可能不希望缓存此ajax请求,但这取决于您。


从评论中编辑:

您需要将参数添加为GET的查询字符串,而不是通用“数据”。

尝试这样的事情:

$.ajax({
    url: "http://localhost:3000/teamplayers.json?resolution="+ids,
    type:"GET",
    dataType: "json",
    success:function(){ 
        $('#test3').val(1);
        alert("test 3"); 
        },
    error: function(error) {
               alert("Failed " + console.log(error) + " " + error)
               }           
    });
});

评论的另一个编辑:

# GET /teamplayers
# GET /teamplayers.json
def index
  @teamplayers = Teamplayer.all
  @fteams = Fteam.all
  @teamplayer2 = 1
  tid = params.fetch(:resolution) { 0 } # make sure we got something
  @ids = tid.to_i                       # coerce string param to integer
end