成功的ajax调用后渲染部分?

时间:2011-03-20 03:41:15

标签: jquery ruby-on-rails ruby partial

我有这个jquery ajax

$.ajax({
 url: "/update_fb_user?fb_uid=" + FB.getSession().uid,
 dataType: 'json',
 success: function(data){
    if(data.user != "none"){
        // here is where i need to render this partial
    }else{
        window.location.href = '/signup';
    }
 }

这是视图中的部分调用

<div id="fb_iframe">
<% unless current_user.not_using_facebook? %>
    <%= render :partial => 'fb_iframe' %>
<% end %>
</div>

我只是想做fb_iframe,但有没有办法渲染部分或重新检查unless块,因为ajax调用会更新它,以便unless条件为真的...关于如何实现这一目标或任何方式的任何想法?

2 个答案:

答案 0 :(得分:4)

假设你的部分已经在视图中(因为你说你想'重新检查除非块'),看起来像是在Ajax调用成功之后重新加载到页面是你的解决方案。

$.ajax({
  url: "/update_fb_user?fb_uid=" + FB.getSession().uid,
  dataType: 'json',
  success: function(data){
    if(data.user != "none"){
      window.location.reload();
    }else{
      window.location.href = '/signup';
    }
  }
});

答案 1 :(得分:3)

问题是,当客户端运行JavaScript时,服务器上存在部分生命。您需要将服务器中呈现的html返回给客户端。如何执行此操作取决于部分取决于您的用户模型。

我能看到的两个最佳选择是:

  1. 返回部分作为json结构的一部分/update_fb_use返回。然后说$("#fb_iframe").html(data.html)

  2. 使用jQueryMustache.js将原始页面中的部分作为JavaScript模板包含在内。然后,如果您有用户,只需渲染模板。

  3. 方法2的问题在于,在您从用户那里获得足够的数据之前,可能很难创建JavaScript模板。这一切都取决于你的部分内容。