Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.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 关于image.src用于统计的问题_Javascript_Gif_Usage Statistics - Fatal编程技术网

Javascript 关于image.src用于统计的问题

Javascript 关于image.src用于统计的问题,javascript,gif,usage-statistics,Javascript,Gif,Usage Statistics,我有一个问题,当我使用image.src在1x1 gif上发出请求时。但当我使用chrome和safari时,请求无法登录到我的web服务器。但当我使用javascript延迟一小秒(比如300ms)时,它就可以工作了。有谁知道一个更好的解决方案,而不是使用300ms延迟(因为它会使我的点击变慢) 我的javascript看起来是这样的 /* Event Capture */ function eventCapture(et,ep,eid,eurl) { var ec=new Im

我有一个问题,当我使用image.src在1x1 gif上发出请求时。但当我使用chrome和safari时,请求无法登录到我的web服务器。但当我使用javascript延迟一小秒(比如300ms)时,它就可以工作了。有谁知道一个更好的解决方案,而不是使用300ms延迟(因为它会使我的点击变慢)

我的javascript看起来是这样的

/* Event Capture */
function eventCapture(et,ep,eid,eurl) {     
  var ec=new Image();
  ec.src=cp+cd+cu
  +"&et="+escape(et)
  +"&ep="+escape(ep)
  +"&ei="+escape(eid)
  +"&eu="+escape(eurl)+_do+_vo
  +"&cb="+new Date().getTime();   
}

有人知道请求吗?

您如何设置延迟?如果你打电话

setTimeout("javascript function",milliseconds);
在事件捕获中,它不应该阻塞页面的其余部分,并且能够一次处理多次单击,因为每次调用都会调用一个独立于其余部分的新setTimeout


就您的代码而言,我假设变量
cp、cd和cu
是在其他地方全局定义的?如果首次调用脚本时未定义某些内容,则在创建图像的
src
字符串时,Chrome将抛出
ReferenceError
,有一种可能是图像立即被垃圾收集,因为没有对图像变量
ec
的持久引用。但是,当您执行
setTimeout()
时,它会创建一个闭包,使变量持续足够长的时间

您可以测试此解决方案,该解决方案仅在映像实际加载之前创建临时闭包,以查看它是否解决了问题:

/* Event Capture */
function eventCapture(et,ep,eid,eurl) {     
  var ec=new Image();
  ec.onload = function() {
      ec = null;
  }

  ec.src=cp+cd+cu
  +"&et="+escape(et)
  +"&ep="+escape(ep)
  +"&ei="+escape(eid)
  +"&eu="+escape(eurl)+_do+_vo
  +"&cb="+new Date().getTime();   
}

非常感谢你。供应商现在使用的延迟方法是通过循环,类似这样:void pausecomp(pausetime){var wait_time=new Date()+pausetime;while(new Date()