我最近注意到,当按下“保存”按钮时设备正在旋转或在此davay上呼叫某人时,我在桌面上有一个重复的行。在UserRealTime的行上,我看到间隔是5-6毫秒的重复。
如何使用javascript或jQuery避免重复。例如,检查设备与Internet的连接?
ajax.php
<?php
if (isset($_GET['d1']) && isset($_GET['d2']))
{
$conn=connSQL();
$query = "insert into doorname(d1, d2, UserRealTime) values ('".$_GET['d1']."','".$_GET['d2']."', getdate())";
$rs=$conn->execute($query);
$rs->Close();
$conn->Close();
}
?>
的JavaScript
<script>
var httpObject = null;
function getHTTPObject()
{
if (window.ActiveXObject)
{
return new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)
{
return new XMLHttpRequest();
}
else
{
return null;
}
}
function Inter()
{
httpObject = getHTTPObject();
if (httpObject != null)
{
var d1=document.getElementById('d1').value;
var d2=document.getElementById('d2').value;
if (d1=="" || d2=="")
{
alert("sorry!!!");
}
else
{
httpObject.open("GET", "ajax.php?d1="+d1+"&d2="+d2, true);
httpObject.send(null);
httpObject.onreadystatechange = InterSet;
}
}
}
function InterSet()
{
if(httpObject.readyState == 4)
{
var data=httpObject.responseText;
alert("Good!!!");
}
}
</script>
答案 0 :(得分:0)
这种方法不是建议的做法。但是,只是解决这个问题是处理一般重复数据库条目的一种方法。
在客户端为每个成功的服务器端插入生成一个随机令牌。一旦服务器确认插入成功,就丢弃客户端上的令牌。以下是一个例子:
1)在客户端生成随机令牌,就像这样 Generate random string/characters in JavaScript
var tokenOnClientSide = makeid();
2)将生成的Token附加到Ajax Params:
httpObject.open("GET", "ajax.php?d1="+d1+"&d2="+d2+"&token="+token, true);
3)服务器端:查看令牌是否已存在
<?php
if (isset($_GET['d1']) && isset($_GET['d2']) && isset($_GET['token']))
{
$query = sprintf("SELECT * FROM token_table WHERE token = '%s'", $_GET['token']);
$rs=$conn->execute($query);
if (mysql_num_rows($res) == 0) {
// carry on with insert and return success message
.....
// now store the token permanently
$query = "insert into token_table(token, time_of_exec) values ('".$_GET['token']."', getdate())";
$rs=$conn->execute($query);
}
4)最后,在客户端取消设置全局令牌
tokenOnClientSide = "";
希望有一个处理重复的基本想法。