0

我得到了以下锚点来访问目标站点并跟踪用户的统计信息:

<a href="http://target.tld" target="_blank" onclick="$('<img></img>').attr({src: 'stats.php?my_param=value'}); return true;">Foo</a>

<a href="http://target.tld" target="_self" onclick="$('<img></img>').attr({src: 'stats.php?my_param=value'}); return true;">Foo</a>

第一个为 img (_blank) 生成200 Ok的状态,但第二个 (_self) 的状态为(canceled)

有人能告诉我为什么吗,有没有更好的方法?

谢谢!

4

1 回答 1

1

首先,避免on*事件属性。如果你有 jQuery,用它来绑定你的事件。其次,看起来您创建img元素的目的是发出 GET 请求来跟踪点击。相反,只需使用 jQuery 来触发请求。

<a href="http://target.tld" target="_blank" class="track-link" data-value="foo">Foo</a>    
<a href="http://target.tld" target="_self" class="track-link" data-value="bar">Foo</a>
$('.track-link').click(function() {
    var trackValue = $(this).data('value');
    $.get('/stats.php', { my_param: trackValue });
});

更新

尝试使用该mousedown事件来确保在页面传输之前发送请求:

$('.track-link').mousedown(function() {
    var $link = $(this);

    if (!$link.data('request-sent')) {
        $.get(
            '/stats.php', 
            { my_param: $link.data('value') },
            function() {
                $link.data('request-sent', true);
            }
        );
    }
});

更新#3

$('.track-link').click(function(e) {
    e.preventDefault();
    var $link = $(this);
    $.get(
        '/stats.php', 
        { my_param: $link.data('value') },
        function() {
            window.location.assign($link.prop('href'));
        }
    );
});
于 2013-04-23T15:50:30.860 回答