私はeventSourceを作成したjQueryのこの部分を持っています。データベースにアクセスして、クエリと一致するテーブル内の新しいレジスタを見つけます。
一致すると、トリガー付きの Bootstrap のモーダルが表示され、ユーザーからのデータと 2 つのボタンが表示されます。これらのボタンは、と呼ばれる機能を使用します。f_permiso_entrada
この関数は、ユーザーのエントリが許可されたか拒否されたかを知らせるプッシュ通知をユーザーに送信します。問題は、最初に1回のプッシュ通知を送信し、2回目に2回のプッシュ通知を送信することです...
f_permiso_entrada
Insomnia で関数を実行し、プッシュ通知を 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 );