我试图跟踪注册用户的活动,特别是当他们单击指向下载文件的链接时。文件系统插件是WP Filebase。
我发现,当我通过jQuery添加click()处理程序时,它并没有发生,所以我切换到mousedown()处理程序来进行基于Ajax的跟踪。
看起来发生的情况(基于Firebug的网络活动监视器)是,如果我按下鼠标(mousedown)然后释放,生成的文件下载对话框将取消mousedown活动(网络选项卡将mousedown Ajax调用显示为“已取消”)。因此,Ajax调用从未到达服务器,因此我无法获得跟踪。
另一方面,如果我按下鼠标一段时间不释放,我会看到我的测试Ajax响应(alert())。
由于明显的原因,这是不可行的。还有其他解决方案吗?鼠标向下和锚定单击可以一起工作吗,还是一个总是取消另一个?
编辑,下面是一些我描述的代码(linkx.js):
(function($) {
$(document).ready(function(){
$(\'.wpfilebase-attachment a\').mousedown(function(){
var postParams = {};
postParams[\'action\'] = ZGAjax.TRACKING_ACTION;
postParams[ZGAjax.FILE_ID_PARAM] = this.id;
$.post(
ZGAjax.ajaxurl,
postParams,
function( response ) {
alert( response );
}
);
return true;
});
});
})(jQuery);
php端的处理程序。。。
// Add AJAX tracking of file downloads.
// First, add the link tracking script and create a global namespace to hold the admin_url() for the AJAX call
if (!is_admin()) add_action(\'wp_enqueue_scripts\', \'gsn_add_tracking_script\');
function gsn_add_tracking_script(){
wp_enqueue_script( \'zg-link-tracker\', SCRIPTS_URI . \'/linkx.js\', array(\'jquery\'), \'1.0\' );
wp_localize_script( \'zg-link-tracker\', \'ZGAjax\', array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
\'TRACKING_ACTION\' => TRACKING_ACTION,
\'FILE_ID_PARAM\' => FILE_ID_PARAM
) );
}
// Works in conjunction with linkx.js
add_action( \'wp_ajax_\' . TRACKING_ACTION, \'gsn_track_downloads\' );
function gsn_track_downloads() {
// get the submitted parameters
$file_id = $_POST[FILE_ID_PARAM];
// generate the response
$response = json_encode( array( \'success\' => true, \'file_id\' => $file_id ) );
// response output
header( "Content-Type: application/json" );
echo $response;
// IMPORTANT: don\'t forget to "exit"
exit;
}
PHP方面是很好的教科书,实际上只是给了我一个确认,证明它是有效的。
如果我按住鼠标键足够长的时间以完成整个事务,它确实会起作用。如果我发布,并允许下载开始,我永远不会得到确认。Firebug告诉我Ajax请求已被“取消”,所以这甚至不是一个在下载事务之上进行事务备份的问题(这在一开始是一个疯狂的理论)。