сделать частичное после успешного вызова ajax?

У меня есть этот 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 было истинным... любые идеи о том, как достичь того или иного способа делать это?


person Matt Elhotiby    schedule 20.03.2011    source источник


Ответы (2)


Предполагая, что ваше частичное уже находится в представлении (поскольку вы сказали, что хотите «перепроверить блок, если»), похоже, что перезагрузка страницы после успешного вызова 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';
    }
  }
});
person Fábio Batista    schedule 20.03.2011

Вот в чем проблема: частичная часть живет на вашем сервере, пока JavaScript запускается на стороне клиента. Вам нужно вернуть обработанный html с вашего сервера клиенту. То, как вы это сделаете, зависит от того, зависит ли партиал от вашей пользовательской модели.

Я вижу два лучших варианта:

  1. Возвращает партиал как часть структуры json, которую возвращает /update_fb_use. Затем произнесите $("#fb_iframe").html(data.html).

  2. Включите частичную часть исходной страницы в качестве шаблона JavaScript, используя jQuery или Mustache.js. Затем, если у вас есть пользователь, просто визуализируйте шаблон.

Проблема с подходом 2 заключается в том, что может быть сложно создать шаблон JavaScript, пока вы не получите достаточно данных от пользователя. Все действительно зависит от того, что находится в вашем партиале.

person John F. Miller    schedule 20.03.2011