2013-08-30 56 views
3

我正在寻找增加(在数据库中)在手机浏览器中窃听电话号码的次数。我使用的是tel://协议上的锚,如:电话协议与ajax

<a class='phone-number' href='tel:12345678901'>Call Now!</a>

的想法是当链接被点击发送AJAX请求到服务器。

$(".phone-number").click(function(e){ 
    var url = "phone_tap.php"; 
    var data = {id: 1}; 
    $.post(url, data, function(r){ 
     if(r.success){} 
    }); 
} 

但是,在网络和移动浏览器中,AJAX请求似乎被浏览器取消,因为它调用它的本机程序。

有没有人经历过这个?解决方案?

找到完全相同的问题here没有答案。

+0

我不知道你调用的'touchstart'调用是否会触发 –

回答

2

感谢所有的答案 - 但是,我被追捕a similar issue涉及mailto://协议,而不是tel://协议找到了解决办法。

的解决方案是使用jQuery $.ajaxasync: false属性:

$.ajax({ 
    url: url, 
    data: data, 
    dataType: 'json', 
    async: false, 
    method: "POST" 
}).then(function(r){ 
    if(r.success){} 
}, 'json'); 
+0

这是无解而是(可怕的)解决办法 - JMTC。 .. – Andreas

+0

请注意可能的影响? –

+0

这是AsynchronousJAX。使用'async:false'你可以使它同步。所以没有错误,但至少有一个代码味道。 – Andreas

0

也许这工作。

更改链接:

<a class="phone-number" href="#" data-number="123456789">Call ya!</a> 

而且单击处理程序:而不必在你的HTML中的href数量

$(".phone-number").on("click", function(ev) { 
    ev.preventDefault(); 

    var url = "phone_tap.php"; 
    var data = {id: 1}; 
    $.post(url, data, function(r){ 
     if(r.success){ 
      window.location = "tel://" + $(this).data("number"); 
     } 
    }); 
}); 
0

,你可以重定向resoponse它后递增服务器上的计数器

您可以删除整个ajax调用,并且只需链接到每个号码的phone_tap.php?id=...

里面phone_tap.php你必须做一些事情,如:

UPDATE statistics SET number_of_taps=number_of_taps+1 WHERE id=:id 

并且用类似结尾:

header('location: tel:' . $phone_number); 

这似乎是做给我最简单的笏,和作为奖励,它也可能会阻止刮板从您的页面获取电话号码。 (只是否认robots.txt的访问不会真正阻止任何人)