jQuery를 사용하여 Rails 3 앱에서 AJAX 메시지 스트림을 만들려고합니다. 앱은 게시물을 표시하고 게시물에 답장합니다. 지금은 업데이트 할 브라우저를 새로 고침 사용자가 필요합니다JQuery를 사용하는 메시지 스트림 PeriodicUpdater and Rails
//in app/views/posts/_replies.html.erb
<div class="replies">
<% for reply in @replies %>
<div class="reply">
<p><%= reply.body %></p>
</div>
<% end %>
</div>
내가 PeriodicalUpdater의 jQuery를 포트를 사용하려고 해요 (https://github.com/RobertFischer/JQuery-PeriodicalUpdater/)을을 ajaxify하기 끊임없이 업데이트되는 스트림으로 응답합니다. 나는 새로운 해요
// in public/javascripts/application.js
$(document).ready(function(){
$.PeriodicalUpdater('/replies', {
method: 'post',
data: ???,
minTimeout: 1000,
maxTimeout: 8000,
multiplier: 2,
type: 'json',
maxCalls: 0,
autoStop: 0
}, function(data) {
????
});
});
을 JS와 jQuery를에 라이언 베이츠 'Railscast (http://railscasts.com/episodes/136-jquery)를 기반으로
, 여기에 내가있어 무엇인가 그래서 현재 게시물을 서버에 전달하는 방법도, 또는 서버에 부분 게시를하는 방법도 자동으로 replies
부분을 렌더링하는 방법은 분명하지 않습니다.
// in app/views/posts/show.js.erb
$("#replies").append("<%= escape_javascript(render 'replies') %>");
// app/controllers/posts_controller.rb
class PostsController < ApplicationController
def replies
@replies = Post.find(params[:id]).replies
respond_to do |format|
format.js
end
end
end
컨트롤러로 현재 post
의 ID를 전달하는 몇 가지 방법이 있나요 : 여기에 내 코드의 나머지 부분은? 서버가 새로운 답장을 다시 보낼 수 있도록 어쩌면 마지막 reply
의 ID를 전달합니까?
또한 PeriodicalUpdater의 콜백 함수 안에 모든 것을 수동으로 추가해야합니까? 또는 show
부분을 업데이트 할 수있는 방법이 있습니까?
업데이트 : 나는 아래에 제안 된 @Spencer를 사용하여 AJAX 업데이트를 수행하기 위해 푸시하는 버튼을 먼저 변경했습니다.
해당 매개 변수를 전달하는 데 문제가 있습니다. 내 실제 코드는 고유 한 URL 키를 기반으로 물건을 보이는, 그래서 난 그냥이 :
이<input type="button" value="Refresh" onclick="getReplies('<%= @post.url_key %>');" />
그런 다음 내 application.js 파일 : 내 컨트롤러에서
function getReplies(url_key) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "/replies",
data: { url_key: url_key },
success: function(msg) {
$.each(msg.Replies, function(index, reply) {
$("#replies").prepend('<p>' + reply.body + '</p>')
});
}
});
}
, 내가 가진 :
Processing by PostsController#replies as JSON
Parameters: {"_json"=>"url_key=some-post"}
←[1m←[35mPost Load (1.0ms)←[0m SELECT `posts`.* FROM `posts` WHERE (`posts`.`url_key` IS NULL) LIMIT 1
그래서 그것을 :
def replies
@post = Post.find_by_url_key(params[:url_key])
respond_to do |format|
format.json { render :json => @post.replies }
end
end
내가 얻을 params
에서 매개 변수를 검색하지 않는 것 같습니다.
@Spencer 감사합니다! 간단한 버전부터 시작하겠습니다. 나는 당신이 어떻게 매개 변수로'showTaxYear'를 호출하는지에 대해 혼란스러워합니다. –
@Wesley - 내 응용 프로그램에서 사용자가 드롭 다운 목록에서 과세 연도를 선택할 때 호출하지만 용도에 따라 매개 변수가 필요하지 않으므로 유사한 매개 변수가없는 함수를 단추 클릭 이벤트에 바인딩 할 수 있습니다 . 희망은 그 말이 맞습니다. –
@Spencer하지만 서버의 ID를 게시물에 전달해야합니까? –