2016-11-10 19 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