Отслеживание Omniture SiteCatlayst: ошибка при вызове s.tl() из функции с jQuery без привязки к событию клика

Я хочу отслеживать, когда пользователь отправляет форму, используя «Отслеживание пользовательских ссылок» Omniture. Эта функция использует встроенную функцию s.tl(). Типичная установка выглядит так:

$('a#submit').click(function () {
    s.trackExternalLinks = false;
    s.linkTrackVars = 'events,prop1';
    s.linkTrackEvents = s.events = 'event1';
    s.prop1 = s.pageName;
    s.tl(this, 'o', 'Form Submitted');
});

Этот код отлично работает, когда нажата ссылка примера (<a id="submit">). Скажем, вместо этого мы хотим вызвать функцию для запуска отслеживания ссылок:

// function to track custom link
var trackLink = function() {
    s.trackExternalLinks = false;
    s.linkTrackVars = 'events,prop1';
    s.linkTrackEvents = s.events = 'event1';
    s.prop1 = s.pageName;
    s.tl(this, 'o', 'Form Submitted');
};

// Form Submission code calls trackLink()
$.ajax({
    type: 'POST',
    url: submit.php,
    data: [data],
    success: trackLink()
});

Вызов trackLink() приводит к undefined, предположительно потому, что this в s.tl() больше не указывает на объект DOM? Замена this чем-то вроде $('a#submit')[0] (попытка передать ему объект вместо this) также приводит к undefined. Что я делаю не так?


person Dirk Diggler    schedule 23.02.2012    source источник
comment
Если переменная s определена вне метода $.ajax и вне инструкции $(document).ready, ее можно использовать. И я бы обернул вашу функцию trackLink внутри анонимной. И используйте console.log!   -  person machineaddict    schedule 23.02.2012


Ответы (3)


Первый параметр для s.tl может иметь только одно из двух значений.

Если функция вызывается как обработчик onclick для элемента, то она принимает значение — this —, которое в данном случае разрешается в значение атрибута href элемента. Если это передается в качестве первого параметра, то функция создаст задержку в 500 мс перед загрузкой новой страницы, чтобы обеспечить достаточное время для отправки вызова отслеживания.

Если функция вызывается в любом другом контексте, в том числе как часть формы или обработчика успеха ajax, то первый параметр должен быть литералом — true —. В этом случае функция не добавляет задержку, но все равно отправит отслеживающий вызов.

В вашем случае правильная подпись такова:

s.tl(true, 'o', 'Form Submitted');
person Racheet    schedule 17.04.2013

Пытаться:

$.ajax({
    type: 'POST',
    url: submit.php,
    data: [data],
    success: trackLink.bind(this)
});
person Steve    schedule 23.02.2012

Вы также можете попробовать переключить настройку функции.

function trackLink() {
    s=s_gi(s_account);
    s.trackExternalLinks = false;
    s.linkTrackVars = 'events,prop1';
    s.linkTrackEvents = s.events = 'event1';
    s.prop1 = s.pageName;
    s.tl(this, 'o', 'Form Submitted');
}
person VaBeachKevin    schedule 24.02.2012
comment
Это не решит проблему пользователя, так как это все еще не решает то, что ожидает s.tl в этом случае. S.tl ожидает получить href элемента ‹a› в своем первом параметре. - person Racheet; 17.04.2013