我问了这个问题,但没有彻底解释。我有一个常规链接:
<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?
答案 0 :(得分:1)
您对JavaScript的工作方式存在巨大的根本误解。
首先,当有人点击该链接时,他们将被导航离开您的网页,除非您做了一些事情来阻止(jQuery中的e.preventDefault
或return 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();
})
答案 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脚本,不存储链接被调用的次数。