2012-07-19 69 views
1

我爲用戶的帖子做了一個簡單的Ajax投票腳本:+ 1和-1。一切工作正常,但有時由於某種原因,一鍵發送+3,+6,-2等數據我做了一個Chrome開發工具的截圖。可以看出,一次點擊被稱爲PHP腳本多次。 dot.gif - 數據發送時的buzy動畫。 enter image description hereAjax多次發送數據

<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"; 
+0

請您提供更多信息,無論此頁面是否在同一個容器中加載多次。似乎點擊事件已多次註冊。 – 2012-07-19 06:55:37

+0

這是舊的PHP PHP-Nuke。有一個模塊 - 留言簿。我只是將上面的代碼插入到模塊的index.php中,以用於每個後期輸出。 – Astraport 2012-07-19 07:18:04

+1

當我使用jQuery .live()方法時,我也遇到了這樣的問題,有時將它與.die()一起使用會很有用,如果您有這種情況,請查看.die()。 – 2012-07-19 07:40:47

回答

1

當用戶投票時,應該禁用您的控件。所以只需添加一些阻斷標誌(變量,餅乾等):

$(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; 
}); 
}); 
+0

謝謝。我嘗試過,但仍然要發送多個數據。 – Astraport 2012-07-19 09:02:33

+0

重點在於讓用戶有機會在同一頁面的多個帖子中進行投票,而在您的代碼中這是不可能的。 – Astraport 2012-07-19 09:20:01

+0

只需爲所有投票創建標誌(某些地圖等)。如果用戶已投票,則不應將任何數據發送到服務器。同樣按類名搜索DOM元素是最慢的。 – Serjio 2012-07-19 10:04:28

-1

相反jQuery的單擊事件試着寫的onclick = 「函數名();」 href ..

例如, ...