在我的rails应用程序中,我创建了一个javascript回调函数,用于轮询处理端点以检查图像是否已完成处理,然后像这样更新视图:
create.js.erb 创建回调
// start polling for processed image
function imageProcessed() {
$.ajax({ url: "/posts/" + <%= @post.id %> + "/processing"})
.done(function(data) {
if (data.processing) {
setTimeout(imageProcessed(), 2000);
} else {
// append image url when processed
$("#js-capture-container").html('<img src="' + data.image_url + '" alt="image">');
}
});
}
imageProcessed();
posts_controller.rb 端点
def processing
data = { processing: @post.image_processing }
if !@post.image_processing?
data[:image_url] = @post.image_url(:pair)
end
render json: data
end
这样可以正常工作,但我想获取ajax中返回的数据,并使用此数据渲染已存在的_post.html.erb部分。
返回@post的更新实例,然后将该对象渲染为部分内容。
create.js.erb 中的 "<%= escape_javascript(render @post) %>"
任何想法都会有很大帮助,谢谢!
答案 0 :(得分:1)
我能够通过将partial作为一个HTML字符串呈现在json对象中来实现它,类似于在这个问题中所执行的操作:rails 3 - How to render a PARTIAL as a Json response
我将 post_controller.rb 中的if语句更改为:
if !@post.image_processing?
data[:partial] = render_to_string(@post)
end
然后在 create.js.erb 中将回调更改为:
$("#js-capture-container").html(data.partial);
非常好,非常干净。