Addthis не работает с Ajax
Я загружаю все статьи с помощью Ajax, но функция Addthis не верна.
$thisChild.load( permLink + ' #thePostStuff', function() {
И в обратном вызове упомянутой функции .load() я добавил этот код, чтобы добавить функциональность общего доступа Addthis:
var script = 'http://s7.addthis.com/js/300/addthis_widget.js?domready=1#pubid=MY-PUB-ID';
if (window.addthis){
window.addthis = null;
}
$.getScript( script );
Код в содержимом файла permLink, вызываемый запросом ajax, который загружает Addthis script, выглядит следующим образом:
<!-- AddThis Button BEGIN -->
<div class="addthis_toolbox addthis_default_style addthis_32x32_style"
addthis:url="<?php the_permalink(); ?>"
addthis:title="<?php the_title(); ?>"
addthis:description="<?php the_excerpt(); ?>">
<a class="addthis_button_facebook"></a>
<a class="addthis_button_twitter"></a>
<a class="addthis_button_preferred_3"></a>
<a class="addthis_button_compact"></a>
<a class="addthis_counter addthis_bubble_style"></a>
</div>
<!-- AddThis Button END -->
Проблема заключается в том, что addthis не загружается, как ожидалось. Он работает правильно при первом открытии статьи, но в любое другое время (если страница не обновляется), она не может включать число, отображающее, сколько раз была разделена статья, которая появляется, как это, когда я проверяю элемент: <a class="addthis_button_expanded" target="_blank" title="View more services" href="#">1</a>
ИЗМЕНИТЬ:
Попытка известного исправления: $.getScript( script , function() { addthis.init(); });
, но это не решило проблему.
РЕДАКТИРОВАТЬ 14 августа 2012 г.
Веб-сайт http://epicvan.com, и я просто удалил числа, потому что я никогда не придумывал исправления, пока я работал над ним. Проект был завершен несколько месяцев назад, поэтому я не буду тестировать новые ответы. Надеюсь, они могут помочь вам, если вы столкнулись с той же проблемой! Приветствия
Ответы
Ответ 1
У меня была та же проблема. Исправлено следующее. Надеюсь, что это тоже исправит.
Оригинал:
var script = 'http://s7.addthis.com/js/300/addthis_widget.js?domready=1#pubid=MY-PUB-ID';
if (window.addthis){
window.addthis = null;
}
$.getScript( script );
Новое:
<script>
var script = 'http://s7.addthis.com/js/250/addthis_widget.js#domready=1';
if (window.addthis) {
window.addthis = null;
window._adr = null;
window._atc = null;
window._atd = null;
window._ate = null;
window._atr = null;
window._atw = null;
}
$.getScript(script);
</script>
Ответ 2
Я написал довольно подробное описание здесь fooobar.com/questions/401811/..., но суть в том, что addthis.toolbox(".addthis_toolbox");
- правильное решение, , но оно важно отметить, что его следует вызывать каждый раз при загрузке нового содержимого ajax.
HTML
<div class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_facebook" style="cursor:pointer"></a>
<a class="addthis_button_twitter" style="cursor:pointer"></a>
<a class="addthis_button_email" style="cursor:pointer"></a>
</div>
Javascript
// onload of the ajax content
addthis.toolbox('.addthis_toolbox');
Также обратите внимание, что все, что загружается как iframe, например счетчик facebook, вызывает проблемы, если он вложен в контейнер .addthis_toolbox. Я бы предложил разместить его внутри собственного контейнера и вызвать метод toolbox() для них обоих.
См. мою ссылку для получения более подробной информации.
Ответ 3
После 1 часа попыток пользовательских кодов я нашел этот, который отлично работает.
$(document).ajaxStop(function() {
if (window.addthis) {
window.addthis = null;
window._adr = null;
window._atc = null;
window._atd = null;
window._ate = null;
window._atr = null;
window._atw = null;
}
return $.getScript("http://s7.addthis.com/js/300/addthis_widget.js#pubid=sdive");
});
Это источник
Ответ 4
Попробуйте решение, указанное по этой ссылке,
http://support.addthis.com/customer/portal/questions/399867-addthis-and-ajax-with-addthis-toolbox-
<script type="text/javascript">addthis.toolbox('.addthis_toolbox');</script>
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=vijayk"></script>
Как и у меня тоже была проблема. Но это устраняется вышеуказанными строками.
Надеюсь, это поможет.
Спасибо,
Виджей
Ответ 5
addthis.toolbox(".addthis_toolbox");
Ответ 6
Я прочитал этот пост поддержки на днях, возможно, это связано с вашей проблемой:
http://support.addthis.com/customer/portal/questions/240144-email-template-when-using-ajax-bug-?t=89322
Если я правильно понимаю, он описывает, что после первой акции виджет отключается от вашего профиля, и каждый будущий ресурс (без обновления) не отслеживается или что-то еще. его решение объявляло лобку отдельно.
Я понятия не имею, помогает ли это вообще, но я подумал, что не помешает показать вам, что я нашел по этому вопросу.
Ответ 7
Для тех, кто пришел к этому вопросу сейчас, как я,
Код, который работал у меня, был:
<script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=XXXXXXXXXXXXXXXXX"></script>
<script>
if (window.addthis) {
// for others time force addthis to run again
window.addthis.toolbox('.addthis_toolbox');
} else {
// in the first time use autoload bu addthis
}
</script>
Ответ 8
Проблема в том, что при вызове ajax #pubid теряется, поэтому AddThis не знает, кто выполняет вызов.
Это сработало для меня:
<script>
$.getScript("https://s7.addthis.com/js/300/addthis_widget.js#pubid=YOUR-ID", function () {
addthis_config = { pubid: 'YOUR-ID' };
addthis.init();
});
</script>
Нашел ответ на этот вопрос на сайте поддержки addthis.com: http://support.addthis.com/customer/portal/questions/240144-email-template-when-using-ajax-bug-?t=89322
Ответ 9
Выполнение этой строки кода после вызова AJAX работает для меня:
addthis.layers.refresh();
Ниже приведена моя настройка для AddThis
Script
<script type="text/javascript"
src="//s7.addthis.com/js/300/addthis_widget.js#pubid=<my_pub_id>">
</script>
Я помещаю этот код, где хочу AddThis
показать
<div class="addthis_inline_share_toolbox_tvqk"></div>
Как я делаю вызов AJAX
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
// Update the DOM
if (typeof(addthis) != 'undefined' && addthis != null)
addthis.layers.refresh();
}
};
xhttp.open("POST", "<address_to_post_back_to>", true);
xhttp.send(<post_data>);
Результат
![введите описание изображения здесь]()