我正在向页面提供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.不久之后,如果运行相同的.js文件,那么我有100个,当然,浏览器会锁定起来。非常感谢您的任何见解。
答案 0 :(得分:1)
看起来你已经解决了自己的问题。
旁注(评论太杂乱):请不要将字符串传递给setTimeout
和setInterval
;这是伪装的eval
。传递函数本身:
setInterval(god_geo_event, 5000);
或传递匿名函数:
setInterval(function ()
{
god_geo_event();
}, 5000);
答案 1 :(得分:0)
非常肯定答案是setInterval调用的函数有(),不应该。 setInterval(“god_geo_event()”,5000);
应该是。
setInterval("god_geo_event", 5000);
我们没有将结果传递给setInterval,我们正在传递函数调用。还需要测试,但我认为这是三个月内在3个不同主板上数百个问题已经躲过的问题..惊人的。
答案 2 :(得分:0)
检查您是否在#document上下文中调用了您的函数。
Drupal.behaviors.god_geo = function(context) {
setInterval(function () {
if ($(context).length && $(context)[0].nodeName == '#document') {
god_geo_event();
}
}, 5000);
};