1

私はeventSourceを作成したjQueryのこの部分を持っています。データベースにアクセスして、クエリと一致するテーブル内の新しいレジスタを見つけます。

一致すると、トリガー付きの Bootstrap のモーダルが表示され、ユーザーからのデータと 2 つのボタンが表示されます。これらのボタンは、と呼ばれる機能を使用します。f_permiso_entrada

この関数は、ユーザーのエントリが許可されたか拒否されたかを知らせるプッシュ通知をユーザーに送信します。問題は、最初に1回のプッシュ通知を送信し、2回目に2回のプッシュ通知を送信することです...

f_permiso_entradaInsomnia で関数を実行し、プッシュ通知を 1 つだけ受信したため、その問題を発生させているのは eventSource であることに気付きました。

EventSource コード

if (typeof(EventSource) !== "undefined") {
  let url = `${e_HOST}/visualizar_permiso.php`;
  var o_SOURCE = new EventSource(url);
  o_SOURCE.onmessage = function(event) {
    //Parseo el JSON recibido desde el back.
    let o_INF = JSON.parse(event.data);
    if (o_INF.SUCCESS) {
      if ( !$('#displayPermission').hasClass('in') ) {
        let e_NOMBRE_VIS = o_INF.NOMBRE_VIS;
        let e_MODELO_CAR = o_INF.MODELO_VIS;
        let e_MARCA_CAR = o_INF.MARCA_VIS;
        let e_PLACAS_CAR = o_INF.MATRICULA_VIS;
        let e_ACC_ID = o_INF.ACC_ID;
        let e_HTML = `
          <div class="col-md-12">
            <input type="hidden" value="${e_ACC_ID}" name="DATA[ACC_ID]">
            <img src="${e_URL_IMAGEN}" class="img-responsive img-circle "/>
          </div>
          <div class="col-md-offset-1 col-md-10">
            <p><span>Nombre:</span> ${e_NOMBRE_VIS}</p>
          </div>

        `;

        if ( e_PLACAS_CAR != null || e_MARCA_CAR != null) {
          e_HTML += `
            Aqui va informacion.
          `;
        }

        $('#informationVisitor').empty();
        $('#form-displayPermission #informationVisitor').prepend(e_HTML);
        $('#simulateClic').trigger('click');

        $('#denegarEntrada').click(function(e){
          f_permiso_entrada('DENEGADA', '#8A0808', 'Se ha denegado la entrada correctamente.');
        });

        $('#permitirEntrada').click(function(e){
          f_permiso_entrada('PERMITIDA', '#21610B', 'Se ha permitido la entrada correctamente.');
        });
      }
    }
  }
} else {
  alert("Your browser doesn't support server-sent events...");
}

f_permiso_entrada 関数

function f_permiso_entrada(e_PERMISO_ENTRADA, e_BG_COLOR, e_MSG){
    let e_ACC_ID = $('#form-displayPermission input[name="DATA[ACC_ID]"').val();
    let e_ACC_OBSERVACIONES = $('#form-displayPermission textarea').val();
    let url = `${e_HOST}/permiso_entrada.php`;
    $.ajax({
      type: "POST",
      url: url,
      data: {
        ACC_ID: e_ACC_ID,
        ENTRADA: e_PERMISO_ENTRADA,
        ACC_OBSERVACIONES: e_ACC_OBSERVACIONES
      },
      dataType: 'json',
      success: function(data)
      {
        // BGCOLOR Acceso permitido - '#21610B'
        $('#form-displayPermission textarea').val('');
        $('#displayPermission').modal('hide');
        $('#msg div:first-child').addClass('msg');
        $('#msg .msg').css('background-color', e_BG_COLOR);
        $('#msg .msg > span').text(e_MSG);
        $('#msg').css({
          'display':'block',
          'z-index':'99999'
        });
        $('#msg').fadeOut(4500);
      }
    });
}

EventSource の PHP コード呼び出し

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$e_SIT_PUE_ID = $_SESSION['SES_PUBLIC']['SIT_PUE_ID'];
$e_GUA_SITIO_ID = $_SESSION['SES_PUBLIC']['GUA_SITIO_ID'];
$e_GUA_ID = $_SESSION['SES_PUBLIC']['GUA_ID'];


if ( !empty($e_SIT_PUE_ID) && !empty($e_GUA_SITIO_ID) && !empty($e_GUA_ID) ) {
  $q_QUERY = " 
    SELECT
      ACC_ID,
      ACC_AUTO,
      ACC_USUARIO,
      ACC_OBSERVACIONES
    FROM
      dat_accesos 
    WHERE 
      ACC_SIT_ID = '{$e_GUA_SITIO_ID}' AND 
      ACC_SIT_PUE_ID = '{$e_SIT_PUE_ID}' AND 
      ACC_ESTATUS = 0
  ";

  $r_CONSULTA_ACCESO = $GLOBALS['SYSTEM']['DB']->get_resource('HASTY_BACK_DB', $q_QUERY);

  $e_TOTAL_REGISTROS_ACCESO = $GLOBALS['SYSTEM']['DB']->num_rows_resource('HASTY_BACK_DB', $r_CONSULTA_ACCESO);

  if ($e_TOTAL_REGISTROS_ACCESO > 0) {
    $a_BITACORA = $GLOBALS['SYSTEM']['DB']->get_array('HASTY_BACK_DB', $q_QUERY);

    /*El campo ACC_USUARIO es JSON y se decofica a un array asociativo y se incorpora
      a la variable $a_BITACORA */
    $a_USUARIO = json_decode($a_BITACORA['ACC_USUARIO'], true);
    $a_BITACORA['NOMBRE_VIS'] = $a_USUARIO['NOMBRE'];
    $a_BITACORA['TELEFONO_VIS'] = $a_USUARIO['TELEFONO'];
    $a_BITACORA['IMAGEN_VIS'] = $a_USUARIO['IMAGEN'];
    $a_BITACORA['INVITADOR'] = $a_USUARIO['INVITADOR'];
    unset($a_BITACORA['ACC_USUARIO']);

    /*El campo ACC_AUTO es JSON y se decofica a un array asociativo y se incorpora
      a la variable $a_BITACORA */
    $a_AUTO = json_decode($a_BITACORA['ACC_AUTO'], true);
    $a_BITACORA['MODELO_VIS'] = $a_AUTO['MODELO'];
    $a_BITACORA['COLOR_VIS'] = $a_AUTO['COLOR'];
    $a_BITACORA['MATRICULA_VIS'] = $a_AUTO['MATRICULA'];
    $a_BITACORA['MARCA_VIS'] = $a_AUTO['MARCA'];
    unset($a_BITACORA['ACC_AUTO']);

    //$a_PARAMS['BITACORA'][] = $a_BITACORA;
    $a_BITACORA['SUCCESS'] = true;
    $a_PARAMS = json_encode($a_BITACORA);
  } else {
    $a_BITACORA['SUCCESS'] = false;
    $a_PARAMS = json_encode($a_BITACORA);
  }

  echo "data:{$a_PARAMS}\n\n";

  flush();

プッシュ通知を送信する PHP コード。

$headers = array
(
  'Content-Type: application/json',
  'Authorization: key=' . $API_ACCESS_KEY
);
header("Access-Control-Allow-Origin: *");    
$chi = curl_init();
curl_setopt( $chi,CURLOPT_URL, $dispositivo );
curl_setopt( $chi,CURLOPT_POST, true );
curl_setopt( $chi,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $chi,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $chi,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $chi,CURLOPT_POSTFIELDS, json_encode( $fields_visitante ) );
$result = curl_exec($chi);
curl_close( $chi );

header("Access-Control-Allow-Origin: *");
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, $dispositivo );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields_colono ) );
$result = curl_exec($ch);

curl_close( $ch );
4

0 に答える 0