计算点击次数更改链接href

时间:2013-08-28 04:48:22

标签: php jquery ajax

我问了这个问题,但没有彻底解释。我有一个常规链接:

<a href="http://www.google.com">Click Me</a>

我希望在单击链接10次之后更改href而不是单独使用,但是所有用户共点击了10次。我的jquery显然有缺陷,但这就是我所拥有的:

var count = 0;
$(document).ready(function(){
$('a').click(function(){
count++;
if(count > 10){
$('a').attr("href","https://www.yahoo.com");
}
});
});

我是jQuery的新手但是从我读过的cookie和本地存储存储个人用户信息而不是整个网站信息。那么我如何使用ajax与数据库来做到这一点?甚至可能是php?

6 个答案:

答案 0 :(得分:1)

您对JavaScript的工作方式存在巨大的根本误解。

首先,当有人点击该链接时,他们将被导航离开您的网页,除非您做了一些事情来阻止(jQuery中的e.preventDefaultreturn false)。一旦它们被导航,你的计数器就会丢失,因为它存储在本地,内存中,用于页面的生命周期。

其次,即使计数器未被清除,或者您将计数器存储在cookie或localStorage中,它也只会计入单个用户。如果您想计算所有用户的点击次数,则必须执行该服务器端。即,在PHP中。

那么......我们怎么做?好吧,正如我之前所说,当用户点击该链接时,他们将被发送给Google。您的网站将不知道发生了什么。

我们有两种方法可以解决这个问题。我们可以截取点击,并使用AJAX(更合适的是“XHR”)将请求发送回您的服务器,您可以在此处记录点击,然后将其转发给Google。

或者,您将URL重写为/log_click.php?forward=http://google.com之类的内容。现在,当用户点击该链接时,它们实际上会被发送到您的log_click.php脚本,您可以在其中将点击记录到您的数据库,然后将$_GET['forward']header('location: ...')结合使用以转发他们到了目的地。这是最简单的解决方案。通过一些JavaScript hackery,你可以隐藏链接,这样当他们鼠标悬停在链接上时,他们甚至不会知道他们被发送到你的网站(Google会这样做)。

一旦累积了10次点击,您再次使用PHP在下次有人查看该页面时写出不同的HTML链接。

答案 1 :(得分:1)

HTML

<a href='http://www.google.com' data-ref='99'>Click Me</a>

的Javascript

$("a").click(function() {
    var _this = $(this);
    var ref = $(this).data('ref');
    $.ajax({
        url: '/click_url.php',
        type: 'POST',
        data: {id:ref}
        success: function(href) { 
            if(href != '')
               _this.attr("href",href);
        }
    });
}

PHP(click_url.php)

if($_POST['id'] > 0){
    $id = $_POST['id'];

    //count increment
    $sql = "UPDATE table SET count = count + 1 WHERE id = '$id'";
    mysql_query($sql);

    //get row count
    $sql = "SELECT * FROM table WHERE id = '$id' LIMIT 1";
    $result = mysql_query($sql);
    $row = mysql_fetch_array($result);

    //if count > 10 , return new url
    if($row['count'] > 10){
        die($row['href']);
    }
}

答案 2 :(得分:0)

单击链接时,您可以调用ajax请求并增加服务器中的计数。所以你应该从href删除链接并每次使用javascript window.location.href手动调用。希望有所帮助

答案 3 :(得分:0)

var count = 0;
$(document).ready(function(){
$('a').click(function(e){

e.preventDefault();
count++;
if(count > 10){
$('a').attr("href","https://www.yahoo.com");
}
});
});

并使用如下的ajax

//发送设置状态请求

  $.ajax({
        type: "POST",
        contentType: "text/xml; charset=utf-8",
        datatype: "xml",// you can set json and etc
        url:"your php file url",
        data: {test:test1},// your data which you want to get and post 
        beforeSend: function (XMLHttpRequest) {
// your action 
       },
        success: function (data, textStatus, XmlHttpRequest) {
// your action        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });

了解更多详情请参阅 Ajax

答案 4 :(得分:0)

马克的回答更有用,即使你想为了某些限制而实现,然后尝试使用 jQuery 1.9

我实施了3次点击,AFAIU需要每隔3次点击更改网址

var c=0;
$(document).on('click', 'a#ten', function(e){
    c++;
    alert('clicked ' + c + ' times');
    if(c%3 == 0) {
         $('a').attr("href","https://www.yahoo.com");
         alert('changed');
         c = 0;
    }
    e.preventDefault();
})

working DEMO

答案 5 :(得分:0)

您必须保存没有用php在数据库中单击链接的次数。当你渲染链接(用php)时,检查它之前被调用的次数并确定要渲染的链接。

<a href="http://www.google.com" class="mylink">Click Me</a>

在您放置链接的页面中写下此javascript

 $(function()
    {
        $('.mylink').click(function()
        {
            $.ajax({
                    type: "POST",
                    url: "listening/end/point", // enter your counting url here
                    async: false
                );

        });
    });

在侦听端点的服务器上编写php脚本,不存储链接被调用的次数。