我有一个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 );