Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JS Ajax отправляет данные несколько раз (https://javascript.ru/forum/misc/29929-js-ajax-otpravlyaet-dannye-neskolko-raz.html)

Astraport 17.07.2012 15:54

JS Ajax отправляет данные несколько раз
 
Всем привет!

Сам написал простейшую голосовалку чтобы юзеры могли оценивать пост +1 или -1. JS дергает нужные PHP скрипты и данные заносятся в базу. Но что-то скрипт глючит. Иногда (особенно если проголосовать сначала за другие посты) начисляется сразу 3 или 6 голосов. В чем может быть проблема никак не пойму. Вот скрипт:

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


PHP не привожу, т. к. он отвечает только на зачисление баллов в базу.

Заранее благодарен!

Serg_pnz 17.07.2012 17:02

Всё нормально, один раз отсылаются данные http://learn.javascript.ru/play/67YXJb

Astraport 17.07.2012 18:30

Цитата:

Всё нормально, один раз отсылаются данные
Может ПХП виноват?
<?php
include("configdb.php");

$ip=$_SERVER['REMOTE_ADDR']; 

if($_POST['id'])
{
$id=$_POST['id'];
$id = mysql_escape_String($id);

$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);

if($count==0)
{
$sql = "update book set up=up+1  where id='".$id."'";
mysql_query( $sql);

$sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')";
mysql_query( $sql_in);
}
else
{
}

$result=mysql_query("select up from nlbook where id='$id'");
$row=mysql_fetch_array($result);
$up_value=$row['up'];
echo $up_value;
}
?>

Serg_pnz 17.07.2012 19:08

Строка 26 по логу, точно название таблицы nlbook? В 16 строке обновляли данные таблицы book.

Astraport 17.07.2012 19:17

Спасибо за внимательность. Это я так неаккуратно изменял названия таблиц с целью безопасности:)

Serg_pnz 17.07.2012 19:36

О_о тогда уж надо называть jg3rt37r5654
Заработало?

Serg_pnz 17.07.2012 20:20

Кстати что вспомнил: с целью безопасности ставят префиксы, например так jg3rt37r5654_book, jg3rt37r5654_users и т.д.

Astraport 17.07.2012 20:47

Я видимо неправильно выразился. Я изменил названия таблиц ТОЛЬКО для форума. В продакшене :) все работает как нужно за исключением неверного начисления баллов.

Astraport 18.07.2012 11:41

Задача не имеет решения? Куда хоть копать подскажите?

Serg_pnz 18.07.2012 12:21

Я не вижу других ошибок.


Часовой пояс GMT +3, время: 09:34.