2015-05-06 5 views
0

У меня есть сайт, на котором через AJAX загружается одна часть страницы (блок #main-inner), чтобы ускорить навигацию. Этот фрагмент страницы может содержать различные социальные кнопки (twitter, G +, facebook), которые инициализируются после успешного завершения AJAX-вызова и HTML-код был добавлен на страницу.Ajax-загрузка FB «как» кнопка работает только в первый раз

Эта загрузка AJAX может происходить несколько раз, пока посетитель находится на странице: каждый раз, когда блок #main-inner удаляется (через jQuery) и воссоздается при успешном вызове AJAX.

Моя проблема в том, что кнопка facebook «как» инициализируется правильно после первого вызова AJAX. При следующих вызовах кнопка facebook больше не появляется, и через некоторое время консоль показывает это сообщение об ошибке: fb:like failed to resize in 45s.

Другие социальные кнопки работают нормально.

Вот функция я использую, чтобы инициализировать кнопку facebook после содержания #main-inner блока изменился:

var loadFacebook = function() { 
    if ($('.fb-like').length){ 
     var options = { 
      status: true, 
      cookie: true, 
      xfbml: true, 
      appId: XXXXXXXXX 
     }; 
     if (typeof (FB) != 'undefined') { 
      // FB.init(options); 
      FB.XFBML.parse(document.getElementById('main-inner')); 
     } else { 
      $.getScript('//connect.facebook.net/fr_FR/all.js', function() { 
       FB.init(options); 
      }); 
     } 
    } 
}; 

Почему это работает только в первый раз ... Есть ли способ сбросить, или выгрузить предыдущую кнопку перед повторной инициализацией новой?

ответ

0

Мне удалось сбросить (и перезагрузить) кнопку facebook, опустошив переменную FV при каждом повторном инициализации. Таким образом, функция теперь:

var loadFacebook = function() { 
    if ($('.fb-like').length){ 
     var options = { 
      status: true, 
      cookie: true, 
      xfbml: true, 
      version: 'v2.3', 
      appId: XXXXXXXXX 
     }; 
     FB = null; // <- that's the key 
     $.getScript('//connect.facebook.net/fr_FR/all.js', function() { 
      FB.init(options); 
     }); 
    } 
}; 

Я все еще интересно знать, если есть лучше (чище?) Способ сделать это.

Однако я не уверен, что этого достаточно, потому что, хотя подобная кнопка теперь корректно появляется после каждой загрузки AJAX, кажется, что она не может прочитать недавно введенные ajax данные на странице, и поэтому все поля в всплывающее окно (открывается при нажатии на кнопку) пустые ... :-(

Смежные вопросы