Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阿贾克斯获得比赛条件?_Javascript_Jquery_Ajax_Events_Race Condition - Fatal编程技术网

Javascript 阿贾克斯获得比赛条件?

Javascript 阿贾克斯获得比赛条件?,javascript,jquery,ajax,events,race-condition,Javascript,Jquery,Ajax,Events,Race Condition,我试图跟踪事件时,我的网站上点击链接的方法类似于以下 <a href="/example" class="track">Example</a> <script type="text/javascript"> jQuery(function($) { // track clicks on all anchor tags that require it $('a.track').live('click', function

我试图跟踪事件时,我的网站上点击链接的方法类似于以下

<a href="/example" class="track">Example</a>

<script type="text/javascript">
    jQuery(function($) {
        // track clicks on all anchor tags that require it
        $('a.track').live('click', function(e) {
            // send an AJAX request to our event tracking URL for the server to track it
            $.get('/events/track', {
                    url: $(this).attr('href'),
                    text: $(this).text()
            });
        });
    });
</script>
请注意,我并不担心AJAX请求的结果……我只是希望它用事件发生的事实ping服务器


(另外,我希望我会得到至少一个答案,即只从服务器端而不是客户端跟踪新页面加载。这不是这个问题的可接受答案。我正在寻找类似于Google Analytics的
trackPageview
功能如何在锚定标签的点击事件上工作,而不管新页面是否被删除。)

通过像Charles这样的代理运行Google的
trackPageview
方法表明,调用
trackPageview()
从Google的服务器请求设置了各种参数的像素,这就是大多数分析包实现这些功能的方式(Omniture也这样做)

基本上,为了避开没有完成的同步请求,它们让客户端请求一个映像,并在服务器端处理在这些请求中传递的参数

对于您的目的,您需要实现同样的事情:编写一个实用程序方法,从服务器请求一个图像,通过URL参数(比如/track.gif?page=foo.html&link=Click%20Me&bar=baz)传递您感兴趣的信息;然后服务器将这些参数记录在数据库中并发回gif

之后,只需对收集到的数据进行切片和切割,即可生成报告。

Matt

如果您只是想确保已发出跟踪像素请求,并且不依赖于响应,则只需为跟踪像素图像执行document.write即可

您可以在onclick处理程序中编写document.write

href和锚元素的onclick处理程序之间的AFA竞争条件关系到顺序是否定义良好

首先执行事件处理程序脚本 默认操作随后发生(在本例中,默认处理程序为href) (来源:)

但是是的,如果您依赖于跟踪请求对服务器的响应,那么您必须使其同步

建议的选项是调用一些javascript函数来包装已经定义的onclick处理程序,然后按顺序进行调用。确保跟踪请求不是异步的


尽管建议您不要依赖跟踪像素请求的响应。

这是如何防止竞争条件的?像素是以非AJAX方式加载的?例如,它是通过
document.write
加载到图像标记的页面中的?还是Javascript图像()对象的使用方式与以前为翻滚预加载图像的方式类似?我只是想确保我正确地实现了这一点,这样我就不会以一种新的方式出现相同的竞争条件。谢谢!:)好吧,基本上这项工作都是在服务器端完成的。客户的唯一责任是发送请求;如果需要,它可以将图像插入页面,但真正的操作是点击服务器并允许服务器记录发送给它的内容。在这种情况下,您可以创建一个新的图像,发送一个Ajax请求,加载一个脚本,等等,只要您向服务器发出一个请求。这首先让我回到我的问题上来。我正在发出一个ajaxget请求,但有时在加载锚标记上请求的页面之前,它不会向服务器发出请求。我如何确保图像加载不会出现同样的问题?我试图深入研究GA代码,看起来他们使用的是Javascript
image
对象。i、 e.:
var图像=新图像(1,1);image.src=“tracking\u pixel\u url.gif”客户端上的图像加载在这里并没有真正起作用;相反,是对服务器的请求发挥了所有的作用。
<a href="/example" onclick="javascript:pageTracker._trackPageview('/click/example');">Example</a>