0

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

<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?

4

6 回答 6

2

你对 JavaScript 的工作原理有一个巨大的基本误解。

首先,当有人单击该链接时,他们将被导航离开您的页面,除非您采取措施阻止这种情况(e.preventDefaultreturn false在 jQuery 中)。一旦它们被导航走,您的计数器就会丢失,因为它会在页面的整个生命周期内存储在本地、内存中。

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

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

我们有两种选择来解决这个问题。我们可以拦截点击,并使用 AJAX(更恰当地说是“XHR”)将请求发送回您的服务器,您可以在其中记录点击,然后再将其转发给 Google。

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

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

于 2013-08-28T04:59:28.143 回答
1

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

于 2013-08-28T04:53:40.923 回答
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']);
    }
}
于 2013-08-28T05:05:26.790 回答
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

于 2013-08-28T04:57:25.480 回答
0

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

我已经实现了 3 次点击,AFAIU 您需要在每 3 次连续点击时更改 URL

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

于 2013-08-28T05:00:45.790 回答
0

您必须使用 php.ini 保存在数据库中单击链接的次数。当您渲染链接(使用 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 脚本来存储该链接被调用的次数。

于 2013-08-28T05:07:10.957 回答