我的javascript代码已添加到随机网站。我希望能够在点击网站上的(特定)链接/按钮时向我的服务器报告。但是我希望在任何情况下(例如我的代码中的错误,或者我的服务器ID等等)没有任何可能的网站执行中断。换句话说,无论我的代码如何,我都希望网站执行默认操作。
执行此操作的简单方法是向click事件添加事件侦听器,同步调用服务器以确保调用已注册,然后执行单击。但我不希望我的网站和代码能够导致点击不完整。
关于如何做到的任何其他想法?
答案 0 :(得分:1)
只要您不返回false ;在你的回调中,你的AJAX 是异步的我不认为你的链接不起作用会有任何问题。
$("a.track").mousedown(function(){ $.post("/tools/track.php") })
我还建议你将整个logyc封装在 try {} catch()块中,这样任何被调用的错误都不会阻止正常的点击行为继续。
答案 1 :(得分:1)
也许是这样的?我没有测试它,所以它可能包含一些拼写错误,但想法是一样的......
<script type="text/javascript">
function mylinkwasclicked(id){
try{
//this function is called asynchronously
setTimeOut('handlingfunctionname('+id+');',10);
}catch(e){
//on whatever error occured nothing was interrupted
}
//always return true to allow the execution of the link
return true;
}
</script>
那么您的链接可能如下所示:
<a id="linkidentifier" href="somelink.html" onclick="mylinkwasclicked(5)" >click me!</a>
或者你可以动态添加onclick:
<script type="text/javascript">
var link = document.getElementById('linkidentifier');
link.onclick=function(){mylinkwasclicked(5);};
</script>
答案 2 :(得分:1)
附上此功能:
(new Image()).src = 'http://example.com/track?url=' + escape(this.href)
+ '&' + Math.random();
但是,由于在图像请求完成之前网站已卸载,可能会错过点击
。答案 3 :(得分:0)
点击应该正常处理。
1)如果你的javascript代码有错误,页面可能会在状态栏中显示错误图标,但它会继续处理,它不会挂起。
2)如果您的ajax请求是异步的,页面将发出该请求并同时处理该点击。如果您的服务器关闭并且后台发生的ajax请求超时,则不会导致click事件无法处理。
答案 4 :(得分:0)
如果同步向服务器发出请求,则会阻止原始事件处理程序的执行,直到收到响应为止,如果异步执行,链接或按钮的原始行为可能正在执行表单发布或更改文档的URL,这将中断您的异步请求。
答案 5 :(得分:-1)
延迟页面退出的时间足以ping您的服务器URL
function link_clicked(el)
{
try {
var img = new Image();
img.src = 'http://you?url=' + escape(el.href) + '&rand=' + math.random();
window.onbeforeunload = wait;
}catch(e){}
return true;
}
function wait()
{
for (var a=0; a<100000000; a++){}
// do not return anything or a message window will appear
}
所以我们所做的就是在页面出口处添加一个小延迟,以便为出站ping提供足够的时间进行注册。您也可以在单击处理程序中调用wait(),但这会为不退出页面的链接添加不必要的延迟。将延迟设置为能够提供良好结果的延迟,而不会显着降低用户速度。超过一秒的任何事情都会很粗鲁,但是第二次是请求往返很长时间没有返回任何数据。只需确保您的服务器不再需要处理请求,或者只是转储到日志并稍后处理。