重复的JavaScript和PHP问题

时间:2018-02-27 15:51:50

标签: javascript php

我最近注意到,当按下“保存”按钮时设备正在旋转或在此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>

1 个答案:

答案 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 = "";

希望有一个处理重复的基本想法。