【问题标题】:Ajax sends data multiple timesAjax 多次发送数据
【发布时间】:2012-07-19 06:39:02
【问题描述】:

我为用户的帖子制作了一个简单的 Ajax 投票脚本:+ 1 和 -1。一切正常,但有时由于某种原因一键发送数据 +3、+6、-2 等。我制作了 Chrome 开发人员工具的屏幕截图。可见,一键多次调用PHP脚本。 dot.gif - 发送数据时的热闹动画。

<script type="text/javascript" src="raitings/jquery.js"></script>
<script type="text/javascript">$(function() {$(".vote").click(function() {

var id = $(this).attr("id");
var name = $(this).attr("name");
var dataString = 'id='+ id ;
var parent = $(this);

if(name=='down')
{
$(this).fadeIn(200).html('<img src="raitings/dot.gif" align="absmiddle">');
$.ajax({type: "POST", url: "raitings/down_vote.php", data: dataString, dataType : "html", cache: false, success: function(html)
   { parent.html(html);}
 });
}
else
{
$(this).fadeIn(200).html('<img src="raitings/dot.gif" align="absmiddle">');
$.ajax({type: "POST", url: "raitings/up_vote.php", data: dataString, dataType : "html", cache: false, success: function(html)
   { parent.html(html);
  }  });
}
return false;
    });
});
</script>

<?php
echo "<div class=\"box1\"><div class=\"up\"><a href=\"#\" class=\"vote\" title=\"+ 1\" alt=\"+ 1\" id=".$row["id"]." name=\"up\">".$up."</a></div>"
."<div class=\"down\"><a href=\"#\" class=\"vote\" title=\"- 1\" alt=\"- 1\"  id=".$row["id"]." name=\"down\">".$down."</a></div></div>\n";

【问题讨论】:

  • 您能否提供更多信息,无论此页面是否在同一个容器中多次加载。好像点击事件被注册了多次。
  • 这是旧的 CMS PHP-Nuke。有一个模块 - 留言簿。我只是在每个帖子输出的模块的 index.php 中插入了上面的代码。
  • 我在使用jQuery .live() 方法时也遇到过这样的问题,有时和.die() 一起使用很有用,如果你有这样的情况,那就看看。死()。
  • Nikita,您能否在我的示例中说明我应该如何以及在何处调用 .die()?

标签: php jquery ajax voting


【解决方案1】:

当用户投票后,您应该禁用您的控件。所以只需添加一些阻塞标志(变量、cookie 等):

$(function() {
var isUserVoted = false;
$(".vote").click(function() {
   if (isUserVoted) {
       return false;
   }

   isUserVoted = true;
   var id = $(this).attr("id");
   var name = $(this).attr("name");
   var dataString = 'id='+ id ;
   var parent = $(this);

   if(name=='down') {
      $(this).fadeIn(200).html('<img src="raitings/dot.gif" align="absmiddle">');
      $.ajax({type: "POST", url: "raitings/down_vote.php", data: dataString, dataType : "html", cache: false, success: function(html)
   { parent.html(html);}
      });
   } else {
      $(this).fadeIn(200).html('<img src="raitings/dot.gif" align="absmiddle">');
      $.ajax({type: "POST", url: "raitings/up_vote.php", data: dataString, dataType : "html", cache: false, success: function(html) { parent.html(html);
  }  });
   }
   return false;
});
});

【讨论】:

  • 重点是让用户有机会在同一页面上的多个帖子中投票,而在您的代码中这是不可能的。
  • 只需为所有投票创建标志(一些地图等)。如果用户已经投票,则不应向服务器发送任何数据。通过类名搜索 DOM 元素也是最慢的。
  • 对不起,我不明白该怎么做。不精通JS。
【解决方案2】:

在 jquery 点击事件上尝试写 onclick="function_name();"对于一个href..

例如...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2020-10-08
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多