2011-03-20 118 views
4

我有这个jQuery AJAX成功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> 

我thinkng的只是做fb_iframe的部分呼叫,但有要么使部分或重新检查的方式unless块,因为ajax调用更新它,以便unless条件为真...关于如何实现这一点或任何方式做到这一点的任何想法?

回答

4

假设您的partial已经在视图中(因为您说过要'重新检查except块'),看起来像是在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'; 
    } 
    } 
}); 
3

这是问题,在JavaScript运行客户端时,服务器部分存在。您需要从您的服务器获取呈现的html到客户端。你如何做到这一点取决于部分是否取决于你的用户模型。

我可以看到两个最好的选择是:

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

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

方法2的问题在于,可能很难在用户获得足够的数据之前创建JavaScript模板。这一切都取决于你的偏好。