每次onClick之后查询重复项

问题描述

我有一个添加功能,可以运行插入查询(使用PDO)。

一个插入将相应地工作。这是第二次运行,此后的每次运行都会导致查询重复2次。

我不知道为什么会这样。

用户进行选择,该选择将填充数据表(example1)。然后,他们可以选择一个记录(或泳道)来填充另一个数据表(example2)。

这是最初的onClick事件:

$('#example1').on('click','tr > .laneClick',function(e){
  e.preventDefault();
  const dataTable = $('#example1').DataTable();
  const rowData = dataTable.row($(this).closest('tr')).data();

  let partnerCode = rowData['partner_code'];
  let partnerName = rowData['partner_name'];
  let groupName = rowData['groupname'];

  let lanecriteria = {
    partnerCode: partnerCode,partnerName: partnerName,groupName: groupName
  }

  displayLaneRecords(lanecriteria); 
});

这是函数displayLaneRecords,它显示.laneClick onClick事件之后的第二个数据表,称为“ example2”:

function displayLaneRecords(lanecriteria){
  
  if(lanecriteria == ""){
    let data = '';
  }
  else{ 
    let data = {
        lanecriteria: {
            partnerCode: lanecriteria.partnerCode,vesselProfile: lanecriteria.vesselProfile,salesRep: lanecriteria.salesRep
        }
    }
  }

  $.ajax({
    url: 'api/getLaneData.PHP',type: 'POST',data: data,dataType: 'html',success: function(data,textStatus,jqXHR){
      var jsonObject = JSON.parse(data);    
      var table = $('#example2').DataTable({    
        "data": jsonObject,"columns": [  
          // data columns
        ],"dom": 'Bfrtip',"buttons": [
          {
            text: '<i class="fa fa-plus"></i> Add Lane',className: 'addLane btn btn-primary btn-sm',action: function (e,dt,node,config){
              // opens the form for processing
              $('#addLaneModal').modal('show'); 
            }
          }
        ]
      });
    },error: function(jqHHR,errorThrown){
     console.log('fail: '+ errorThrown);
     return false;
    }
  }); // end ajaxcall
  
  // here is where the form process will occur      

} // end displayLaneRecords();

您将看到,表单处理将在displayLaneRecords()函数内进行。我必须这样做,以便在过程完成后,无需刷新即可重新填充数据表。

这是表格处理:

$('#addLanesubmit').on('click',function(e){
  e.preventDefault();

  let partnerCode = $('#addlanepartnercode').val();
  let partnerName = $('#addlanepartnername').val();
  let groupName = $('#addlanegroupname').val();

  let addlanecriteria = {
    partnerCode: partnerCode,groupName: groupName
  }

  $.post('api/editLane.PHP',{addlanecriteria:addlanecriteria},function(data){
    if(data.indexOf('Error') > 1){
        $('.message').text(data);
        $('#errorModal').modal('show');
        return false();
    }
    else{
        $('.message').text(data);
        $('#messageModal').modal('show');
        $('#messageModal').on('hidden.bs.modal',function(){
            $("#addLaneModal").modal('hide');                   
            displayLaneRecords(lanecriteria); // call displayLaneRecords to refresh the table
        });
    } 
  });
});

实际的名为editLane.PHPPHP流程如下:

<?PHP
  if(isset($_POST['addlanecriteria'])){
    $value = $_POST['addlanecriteria'];

    $partnerCode = isset($value['partnerCode']) ? $value['partnerCode'] : '';
    $partnerName = isset($value['partnerName']) ? $value['partnerName'] : '';
    $groupName = isset($value['groupName']) ? $value['groupName'] : '';

    try{
      $dbc->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
      $insert = $dbc->prepare("INSERT INTO table (`partner_code`,`partner_name`,`group_name`) VALUES (:newpartnercode,:newpartnername,:newgroupname)");

      $insert->execute([
        'newpartnercode' => $partnerCode,'newpartnername' => $partnerName,'newgroupname' => $groupName
      ]);

      if($insert){
        echo "Success: New Lane has been added.";
      }
    }
    catch(PDOException $e){
      echo "Error: " . $e->getMessage();
    }
  }
?>

我试图尽量减少代码

以上所有方法均无任何可见错误。提交表单后,新记录将插入到表中,并且数据表将刷新而不刷新页面

用户添加另一条记录时,就会出现问题-查询重复,而不是插入1条记录,而是插入2条记录。如果他们添加另一条记录,查询将插入4条记录。

接下来我可以尝试什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)