eventSource的多个推送通知

时间:2017-11-03 17:24:22

标签: javascript php ajax curl eventsource

我有一个jQuery,我创建了一个eventSource,它访问数据库,在一个与查询匹配的表中找到一个新的寄存器。

一旦匹配,它会显示一个带有trigger的Bootstrap模式,它会显示来自用户的数据和两个按钮:一个用于允许用户输入,另一个用于禁止用户输入。这些按钮使用名为f_permiso_entrada

的功能

此功能向用户发送推送通知,说明他的条目是允许还是不允许。问题是,第一次,它发送了一个推送通知,第二次发送2推送通知等等......

我意识到这是生成该问题的eventSource,因为我在Insomnia中运行f_permiso_entrada函数,我只收到一个推送通知。

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代码calle

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

0 个答案:

没有答案