2017-09-15 1 views
0

그래서 Kaminari 보석을 사용하여 응용 프로그램에 무한 스크롤을 구현합니다. 내가 겪고있는 문제는 컨트롤러에 매번 Ajax 호출에서 검색 매개 변수를 제공하는 것입니다.레일 페이지 매김 - 매개 변수가있는 Ajax 데이터 입력

def create 
@onsearch = true 
@lists = current_user.lists.all 
@search = params[:search] 
@page = params[:page] 
puts "Search is #{@search}, page is #{@page}" 
@outfits = Oufits.where("description LIKE ?", "%#{params[:search]}%").page(params[:page]).per(20) 
respond_to do |format| 
    format.html 
    format.csv { send_data @outfits.to_csv } 
    format.xls 
    format.js {render :layout => false } 
end 

이 사용자가 페이지 하단으로 스크롤 할 때 내가 전화 아약스입니다 : 잘 작동하고 자바 스크립트로 응답 할 때 렌더링 것을

$.ajax({ 
    type: "GET", 
    url: url, 
    data : { search : '<%= @search %>'}, 
    dataType: 'script', 
    beforeSend: function(){ 
    $('.sk-wave').show(); 
    }, 
    complete: function(){ 
    $('.sk-wave').hide(); 
    }, 
    success: function(response){ 
    $('.sk-wave').hide(); 
    }, 
    error: function(jqXHR, textStatus, errorThrown){ 
    alert("oh no! ajax went wrong.") 
    $('.sk-wave').hide(); 
    console.log("jqXHR = "+JSON.stringify(jqXHR)); 
    console.log("textStatus = "+JSON.stringify(textStatus)); 
    console.log("errorThrown = "+JSON.stringify(errorThrown)); 
    } 
    }); 
} 

부분 및 추가 페이지의 콘텐츠 나머지는 완벽하게 ..

$('.pagecontent').append("<%=j render(partial: 'search/outfits', 
format: 'html') %>"); 

<% if @outfits.current_page == @outfits.total_pages %> 
$('#view-more').remove(); 
<% else %> 
$('#view-more a').attr('href', '<%= url_for(page: 
@outfits.current_page + 1) %>'); 
<% end %> 

그러나 검사 할 때 am이 리터럴 문자열 '< % = @search %>'로 수신되었습니다. 나는 JavaScript에 erb 변수를 전달하는 방법을 구글로했지만, 내가하려고하는 것에 너무 복잡하게 보인다. 그렇다면 어떻게하면 매번 통과 할 수 있습니까?

'<%= @search %>' 나던 당신이 예상대로 작동합니다 : 당신의 도움

+0

아약스 코드는 어디에 넣었습니까? 어떤 파일? – EJ2015

답변

1

주셔서 감사합니다 당신은 몇 가지 문제가있다. app/assets 직접 자산의 자산 파일은 응용 프로그램을 배포하는 동안 서버에서 미리 컴파일되므로 view 변수에 액세스 할 수 없습니다.

<input type="hidden" id="foo" name="zyx" value="<%= @search %>" /> 
var value = $('input#foo').val() 

ajax@search 변수의 값으로 hidden_input를 사용하여 전달하고 jquery하여 페치.

"GET" 본문이 없으므로 data 키가 쿼리 문자열로 전달됩니다.

"POST"을 사용하십시오.

+0

오, 고마워요 - 방금 JS를 앱/자산 디렉토리로 옮겼습니다. –

+0

@Iaaac 미안하지만,'create.js.erb' 파일의'create' 액션에서'@ search' 변수를 가질 수 있습니다. 나는 일종의 질문을하고있다. 미안하다. http://guides.rubyonrails.org/working_with_javascript_in_rails.html#server-side-concerns –