Addthis не работает с Ajax - PullRequest
13 голосов
/ 11 марта 2012

Я загружаю все статьи с помощью 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, выглядит следующим образом:

<!-- 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, и я просто удалил цифры, потому что я никогда не придумал исправления, пока работал над ним. Проект был завершен несколько месяцев назад, поэтому я не буду проверять новые ответы. Надеюсь, они могут помочь вам, если вы столкнетесь с той же проблемой! Приветствия

Ответы [ 9 ]

33 голосов
/ 15 августа 2012

У меня была такая же проблема.Исправлено это со следующим.Надеюсь, это исправит и вас.

Оригинал:

    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>
5 голосов
/ 06 июня 2013

Я написал довольно подробное описание здесь https://stackoverflow.com/a/16950881/1118070, но суть в том, что 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 1014 *

// onload of the ajax content
addthis.toolbox('.addthis_toolbox'); 

Также обратите внимание, что все, что загружается в виде iframe, например в счетчике типа facebook, может вызвать проблемы, если оно будет вложено в контейнер «.addthis_toolbox». Я бы предложил поместить его в собственный контейнер и вызвать метод toolbox () для них обоих.

См. Мою ссылку для более подробной информации.

4 голосов
/ 27 сентября 2014

После 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");
});

Это источник

2 голосов
/ 14 марта 2013

Пожалуйста, попробуйте решение, приведенное по этой ссылке,

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>

Поскольку я тоже столкнулся с той же проблемой. Но это решается приведенными выше линиями. Надеюсь, это поможет.

Спасибо, Виджей

1 голос
/ 10 ноября 2015

Проблема в том, что при вызове 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

1 голос
/ 28 апреля 2013
addthis.toolbox(".addthis_toolbox");
0 голосов
/ 24 августа 2017

Выполнение этой строки кода после вызова 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>);

Результат

enter image description here

0 голосов
/ 08 апреля 2013

Для тех, кто пришел к этому вопросу сейчас, как я, Код, который работал для меня, был:

<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>
0 голосов
/ 15 августа 2012

Я прочитал этот пост поддержки на днях, это может быть связано с вашей проблемой: http://support.addthis.com/customer/portal/questions/240144-email-template-when-using-ajax-bug-?t=89322

Если я правильно понимаю, он описывает, что после первого обмена виджет отключается от вашего профиля, и каждый следующий ресурс (без обновления) не отслеживается или что-либо еще. его решением было объявить pubid отдельно. Я понятия не имею, поможет ли это вообще, но я подумал, что не мешало бы показать вам, что я нашел по этому вопросу :)

...