信标跟踪图像具有204响应&回调函数

时间:2016-08-12 06:47:09

标签: javascript jquery callback http-status-code-204 tracking-pixel

我已经尝试了几天将我的跟踪像素JS功能转换为使用204" no_content"响应。

我可以轻松地将其工作,但我需要能够在之后触发回调函数。

一旦返回204,以下似乎不会被解雇。

    beacon: function (opts) {
        var beacon = new Image();

        opts = $.extend(true, {}, {
            url: pum_vars.ajaxurl || null,
            data: {
                action: 'pum_analytics',
                _cache: (+(new Date()))
            },
            error: function () {
                console.log('error');
            },
            success: function () {
                console.log('success');
            }
        }, opts);

        // Create a beacon if a url is provided
        if (opts.url) {
            // Attach the event handlers to the image object
            if (beacon.onerror) {
                beacon.onerror = opts.error;
            }

            if (beacon.onload) {
                beacon.onload = opts.success;
            }

            $(beacon).on('load', function( response, status, xhr ){
                alert(status);
            });

            // Attach the src for the script call
            beacon.src = opts.url + '?' + $.param(opts.data);
        }
    }

正确记录了跟踪,但没有警报或控制台日志消息。这可能还是我只是在浪费时间?

编辑------

基于下面的解决方案,这里是最终版本(假设错误和成功都将使用相同的回调。

    beacon: function (opts) {
        var beacon = new Image();

        opts = $.extend(true, {}, {
            url: pum_vars.ajaxurl || null,
            data: {
                action: 'pum_analytics',
                _cache: (+(new Date()))
            },
            callback: function () {
                console.log('tracked');
            }
        }, opts);

        // Create a beacon if a url is provided
        if (opts.url) {
            // Attach the event handlers to the image object
            $(beacon).on('error success done', opts.callback);

            // Attach the src for the script call
            beacon.src = opts.url + '?' + $.param(opts.data);
        }
    }

1 个答案:

答案 0 :(得分:1)

您没有将任何回调附加到图像。您的测试if (beacon.onerror)会导致错误,因为beacon.onerrornull

您应该使用if( "onerror" in beacon )来测试beacon是否具有onerror属性。

但为什么不使用jquery的方法on

$(beacon).on("error", function() {
    alert("Jquery error");
});

$(beacon).on("done", function() {
    alert("Jquery done");
});