与ajax的电话协议

时间:2013-08-30 09:09:31

标签: jquery mobile

我希望增加(在数据库中)在移动浏览器中点击电话号码的次数。我在锚点上使用tel://协议,如:

<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){}
    });
}

然而,在Web和移动浏览器中,AJAX请求似乎被浏览器取消,因为它调用了它的本机程序。

以前有人经历过这个吗?溶液

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

3 个答案:

答案 0 :(得分:2)

感谢大家的回答 - 但是,我找到了解决方案,搜索a similar issue涉及mailto://协议而不是tel://协议。

解决方案是使用jQuery $.ajax的{​​{1}}属性:

async: false

答案 1 :(得分:0)

也许这有效。

将链接更改为:

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

点击处理程序:

$(".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");
        }
    });
});

答案 2 :(得分:0)

您可以在服务器上递增计数器后,将resoponse重定向到,而不是在html中使用href中的数字。

您可以完整删除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中访问不会真正阻止任何人)