Javascript 获取点击次数并使用jquery调用单个ajax调用

Javascript 获取点击次数并使用jquery调用单个ajax调用,javascript,jquery,ajax,Javascript,Jquery,Ajax,当用户连续单击一个链接时,我需要调用ajax服务,但现在我编写的是一次单击。一旦单击,ajax就会调用并正常工作,但连续单击意味着只需要第一次单击。我需要在调用ajax服务结束时总共单击多少次。非常感谢您的帮助。 这是我的密码: <a href="#" onclick="call()" data-tag="Prev" id="prev"> Prev </a> function call() { //Here ajax call function } 如下所示: v

当用户连续单击一个链接时,我需要调用ajax服务,但现在我编写的是一次单击。一旦单击,ajax就会调用并正常工作,但连续单击意味着只需要第一次单击。我需要在调用ajax服务结束时总共单击多少次。非常感谢您的帮助。 这是我的密码:

 <a href="#" onclick="call()" data-tag="Prev" id="prev"> Prev </a>

function call() {
//Here ajax call function
}

如下所示:

var计数=0;
函数前一天(){
++计数;
//这里是ajax呼叫
//在ajax调用之后,您可以获得总计数。
}

您可以使用全局变量来计算点击次数,并在必须发送ajax请求时使用最大授权点击次数来检查:

if( click_count === max_clicks){
   console.log('Send Ajax Request');
}
注意:您可以在发送请求时禁用该链接,然后在ajax回调中启用它

var单击\u count=0;
var max_=5;
函数调用(){
单击_count++;
console.log('点击链接'+点击次数+'时间');
如果(点击次数===最大点击次数){
$('#prev').addClass('disabled');
log(“发送Ajax请求”);
}
}
。已禁用{
指针事件:无;
游标:默认值;
颜色:黑色;
不透明度:0.6;
}

使用此设置超时和清除超时:

var ajxTimer = null;
var count = 0;
function call() {
    clearTimeout(ajxTimer);
    ajxTimer = setTimeout(function(){
        count++;
        // code your ajax here....
    },500);
}

在单击事件上调用此函数

var click=0;
函数调用(){
点击++;
console.log('单击计数'+单击);
}

假设您有以下元素:

<a href="#" onclick="call()" data-tag="Prev" id="prev"> Prev </a>
在这段代码中,每次单击链接时,计数都会增加,但有时间限制。i、 e.第一次单击和最后一次单击之间的间隔不得超过2秒,否则进程将重新启动。因此,在本例中,您必须在2秒内单击5次,才能获得所需的内容

如果希望用户只能使用链接一次,而不能再使用链接,则需要将
isalreadycked
boolean默认设置为
false
,当
If
条件满足时,将其设置为
true
,并在
call
函数的第一行检查该布尔值是否为true,不要继续使用
clearInterval
函数来清除setInterval,这样就不会浪费资源

如果用户可以在每次单击N次时使用链接,则不需要布尔或clearInterval函数,只需将
计数重置为
0


更新1: 我想我理解你在第一次更新后想要实现的目标。因此,我上面的JS代码可以更改为:

count = 0, isAlreadyInProcess = false;
function call() {
    count ++;
    if (isAlreadyInProcess) return;
    isAlreadyInProcess = true;

    setTimeout(() => {
        // make your AJAX call
        // in the SUCCESS function of that, write:
            resetData();
    }, 1000);
}

function resetData() {
    count = 0;
    isAlreadyInProcess = false;
}
您需要注意,我显式地分隔了
resetData
函数,因为您只需要在发送请求后调用它,而不只是在下一行

因此,您必须在jQueryAjax调用的
success
部分调用此函数,或者必须使用
Promise
! e、 g.你的电话应该是这样的:

function ajaxCall() {
    return new Promise((resolve, reject) => {
        // make your ajax call and make sure to RESOLVE!
        // so that it goes to the chained THEN promise.
    });
}
然后在
setTimeout
函数中,写入:

ajaxCall().then(res => {
    resetData();
});


=>isAlreadyInProcess
标志确保当您开始单击时,它不会为每次单击调用AJAX!但是它等待了1秒,这是由
setTimout
提供的,在这1秒中,每一次点击都会被计数,但是除了第一次点击之外,不会再有AJAX调用了。在那1秒之后,它进行AJAX调用,当调用完成时,它重置数据并允许用户再次重复该过程,我相信这是您想要的

不过,承诺AJAX调用是可选的,只是为了保持稳定。这取决于您是想发送请求,然后再次开始计数,还是忽略它。

试试这个

<button onclick="myFunction()">Click me</button>


<script>
var maxClick = 10;
var clickCount =0 ;
function myFunction() {
  if(clickCount == maxClick){
  $.ajax({url: "demo_test.txt", 
  success: function(result){

   clickCount = 0;
}});

});
}else{
  clickCount++ ;
   document.getElementById("demo").innerHTML = clickCount;
}
点击我
var maxClick=10;
var-clickCount=0;
函数myFunction(){
如果(clickCount==maxClick){
$.ajax({url:“demo_test.txt”,
成功:功能(结果){
点击计数=0;
}});
});
}否则{
点击计数++;
document.getElementById(“demo”).innerHTML=clickCount;
}

//这里ajax调用
where?您还有其他选项,当用户单击链接时,只需禁用链接或提供加载选项。这是一个简单的方法,所以,像这样试试。我需要允许N次点击,并获得多少次点击,先生……还有其他方法吗?@Sinto你现在可以参考它。我编辑了我的问题是不是一个固定的数字?如果不是,什么算“连续”,即代码应该如何决定“好的,他们完成了单击,是时候进行调用了?”如果您希望它在特定的时间段后启动而没有单击,那么您正在寻找一个“去盎司”函数。我试过了。我在html页面中使用了append(),所以响应需要一段时间。在这段时间内,再次点击意味着无法正常工作。为此,我需要完全点击多少次,然后得到结果,并只调用一次ajax。要做到这一点,先生?您可以使用下面的标志var flag=false;函数Previousday(){if(!flag){flag=true;//此处为ajax调用。在ajax完成后,flag=false;}}在这里,只有ajax调用才会被触发,直到无法完成为止。在另一个函数中等待一段时间后,我如何执行函数调用?不,先生。我没有必须使用的最大限制情况。我需要允许N次,在完成点击后,获得总点击次数(N),然后发送到ajax调用一次。
ajaxCall().then(res => {
    resetData();
});
<button onclick="myFunction()">Click me</button>


<script>
var maxClick = 10;
var clickCount =0 ;
function myFunction() {
  if(clickCount == maxClick){
  $.ajax({url: "demo_test.txt", 
  success: function(result){

   clickCount = 0;
}});

});
}else{
  clickCount++ ;
   document.getElementById("demo").innerHTML = clickCount;
}