发出使用setTimeout调用函数的问题

时间:2011-09-29 14:06:04

标签: javascript settimeout

我们的应用程序在跟踪Google Analytics分析请求时存在问题。除非用于通过setTimeout调用用于向谷歌发送请求的方法,否则不会在firefox中跟踪内部链接。所以我有这个代码工作,但已经离开几个月,发现一个同事完全改变了配置文件并删除了setTimeout调用。现在当我把代码放回去(带有额外的新变量)时,我在browswer中得到一个js错误,说没有定义callGA。这是我的代码:

function trackPageview(id, countryCity, unique, bu, bg, areaClick, uri) {
        setTimeout("callGA('" + id + "','" + countryCity + "','" + unique + "','" + bu + "','" + bg + "','" + areaClick + "','" + uri +"')", 1);
    }

    function callGA(id, countryCity, unique, bu, bg, areaClick, uri) {
        _gaq.push([ '_setAccount', id ]);
        _gaq.push([ '_setCustomVar', 1, 'Location', countryCity, 3 ]);
        _gaq.push([ '_setCustomVar', 2, 'Unique', unique, 3 ]);
        _gaq.push([ '_setCustomVar', 3, 'BU', bu, 3 ]);
        _gaq.push([ '_setCustomVar', 4, 'BG', bg, 3 ]);
        _gaq.push([ '_setCustomVar', 5, 'Portlet', areaClick, 3 ]);
        if (uri) { _gaq.push([ '_trackPageview', uri ]); } else { _gaq.push([ '_trackPageview' ]); }
    };

在多个地点调用trackPageviews。我已在此处发出警报并且很好,问题出在setTimeout行。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

最好不要在setTimeout中引用动作。它使用eval(),这有点凌乱(和糟糕的做法)。最好使用匿名函数。

setTimeout(function() {
    callGA(id,countryCity,unique,bu,bg,areaClick,uri)
}, 1);

答案 1 :(得分:1)

为什么不将callGA函数放在setTimeout中?

function trackPageview(id, countryCity, unique, bu, bg, areaClick, uri) {
    setTimeout(function (id, countryCity, unique, bu, bg, areaClick, uri) {
     _gaq.push([ '_setAccount', id ]);
     _gaq.push([ '_setCustomVar', 1, 'Location', countryCity, 3 ]);
     _gaq.push([ '_setCustomVar', 2, 'Unique', unique, 3 ]);
     _gaq.push([ '_setCustomVar', 3, 'BU', bu, 3 ]);
     _gaq.push([ '_setCustomVar', 4, 'BG', bg, 3 ]);
     _gaq.push([ '_setCustomVar', 5, 'Portlet', areaClick, 3 ]);
     if (uri) { 
       _gaq.push([ '_trackPageview', uri ]); 
     } else { 
       _gaq.push([ '_trackPageview' ]); 
     }
   } , 1);
}