2016-11-10 70 views
0

我在做什么应该是非常简单的,我有页面显示所有记录,如果请求是http,并得到日期之间的recrods如果它是ajax。 页面这里怎么看起来整个页面得到张贴回来,即使与ajax [rails]

这是index.html.erb

<h1>Jobs History</h1> 
<hr> 
<div class="form-inline"> 
    <div class="col-md-12"> 
    <div class="col-md-4"> 
     <%= label_tag(:start_date) %> 
    <div class='input-group date' id='datetimepicker2'> 
     <%= text_field_tag :start_date , "", {class:'form-control'} %> 
     <span class="input-group-addon"> 
         <span class="glyphicon glyphicon-calendar"></span> 
        </span> 
    </div> 
     </div> 
    <div class="col-md-4"> 
     <%= label_tag(:end_date) %> 
    <div class='input-group date' id='datetimepicker1'> 
     <%= text_field_tag :end_date , "", {class:'form-control'} %> 
     <span class="input-group-addon"> 
         <span class="glyphicon glyphicon-calendar"></span> 
        </span> 
    </div> 
     </div> 
    <a id="searchBtn" class="btn btn-skin btn-md" href="#">Search</a> 
    </div> 
</div> 
<div id="items_grid" > 
<%= render partial: 'histories', locals: {bookings: @bookings} %> 
</div> 


<script> 
    $('#datetimepicker1').datetimepicker(); 
    $('#datetimepicker2').datetimepicker(); 
    $('a#searchBtn').click(function(){ 
    $.ajax({ 
     url: "<%= provider_history_index_path %>", 
     type: "GET", 
     data: {start_date: $('#start_date').val(), end_date: $('#end_date').val()}, 
     success: function(resp){ } 
    }); 
    }); 

</script> 

非常正常的权利,这里的控制器:

respond_to :html, :js 
    def index 
    if request.xhr? 
     respond_to do |format| 
     @bookings = current_user.booking_providers.where(visit_end_date:  params[:start_date]..params[:end_date]) 
     format.js 
     end 
    else 
     @bookings = current_user.booking_providers 
    end 

这里index.js.erb的

$("#items_grid").html("<%= escape_javascript(render partial: 'histories', locals: { bookings: @bookings}) %>"); 

问题是当我填写日期并点击搜索时,ajax启动并确实渲染带有新记录的部分,但在此之后立即索引被调用,并且发生覆盖新记录的整页回发。 我不知道为什么

回答

1

我从reddit的用户jemminger答案,万一有人有类似的问题

的原因是因为我被拦截提交,这样我可以执行一个Ajax调用,但我没有阻止表单的默认行为正常发布。 每个jQuery点击处理程序都会收到一个事件。调用事件的preventDefault()。

$('a#searchBtn').click(function(evt){ /* <--- the event object is passed to your handler by jQuery */ 
    evt.preventDefault(); /* <--- stop it from performing its normal behavior */ 

    $.ajax({ 
    url: "<%= provider_history_index_path %>", 
    type: "GET", 
    data: {start_date: $('#start_date').val(), end_date: $('#end_date').val()}, 
    success: function(resp){ } 
    }); 
}); 
0

你需要分开索引和你的ajax调用的路由。或者,您必须在if request.xhr?块中渲染一些内容并返回。 当你GET provider_history_index_path被调用的索引操作。

Rails使用“约定优于配置”,因此Rails中的控制器会自动呈现名称与有效路由相对应的视图。

在你的情况下,Rails渲染index.html.erb毕竟。

相关话题:Rails checkbox AJAX call, don't want to render anything