.setInterval () и Drupal.attachBehaviors заставляют мой файл js запускаться несколько раз - PullRequest
0 голосов
/ 22 февраля 2011

Я доставляю ajax-контент на страницу, и мне нужно заново привязать поведение Drupal к этому контенту.Я использую следующий jquery.Код запрашивает данные каждые 5 секунд на сервере и отображает их.

Drupal.behaviors.god_geo = function(context) {
setInterval("god_geo_event()", 5000);  // call god_geo_event() every 5 seconds
};

/**
* A Function to fetch quotes from the server and display in the designated
* area.
*/
function god_geo_event(){
$.getJSON(Drupal.settings.god_geo.json_url, function(data)  {
  if(!data.status || data.status == 0)  {
      $("#god_geo_occupants-text").html(data.event.occupants);
      Drupal.attachBehaviors("#god_geo_occupants-text");   //THIS CRASHES BROWSER.
  }
}); //end inline function.

Когда я пытаюсь добавить Drupal.attachBehaviors (), кажется, он перезапускает новые экземпляры моего файла JS.Когда я смотрю в firebug, я вижу, что запущен новый экземпляр моего js-файла, затем 4, 8, 16, 32.вверх.Большое спасибо за любые идеи.

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

Похоже, вы решили свою проблему.

Примечание (слишком грязно для комментария): пожалуйста, не передавайте строки setTimeout и setInterval; это eval замаскировано. Передайте саму функцию:

setInterval(god_geo_event, 5000);

или передать анонимную функцию:

setInterval(function ()
{
    god_geo_event();
}, 5000); 
0 голосов
/ 10 июля 2014

Убедитесь, что вы вызываете свою функцию в контексте #document.

Drupal.behaviors.god_geo = function(context) {
  setInterval(function () {
    if ($(context).length && $(context)[0].nodeName == '#document') {
      god_geo_event();
    }
  }, 5000); 
};
0 голосов
/ 23 февраля 2011

Уверен, что ответом будет то, что функция, вызываемая setInterval, имеет (), а когда нет. setInterval ("god_geo_event ()", 5000);

должно быть.

setInterval("god_geo_event", 5000);  

Мы не передаем результаты в setInterval, мы передаем вызов функции. Все еще нужно проверить, но я думаю, что это проблема, которая ускользала от сотен на трех разных платах в течение трех месяцев. Удивительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...