Me encuentro con un problema en el que mis solicitudes de publicación se repiten por razones que no puedo comprender. Estoy usando una solicitud jQuery POST para enviar un formulario a un script php para insertarlo en una base de datos SQL.
Solo sucede en algunas ocasiones y no de manera constante. 9/10 veces funciona según lo previsto, pero a veces la llamada ajax se repite 2 o 3 veces.
ingrese la descripción de la imagen aquí
bloque repetitivo de código:
función enviarRegistro(){
let log = document.getElementById('logContent').value; let project = document.getElementById('logger_active_project').innerHTML; let category = document.getElementById('categorySelect').value; let projectID = document.getElementById('logger_active_project_id').value; let submit = document.getElementById('submit'); submit.disabled = true; console.log('starting ajax post request'); $.post('./includes/logger/scripts/add_log.php', { log:log, project:project, category:category, project_id:projectID }, function(data, status){ document.getElementById('logContent').value= ""; submit.disabled = false; console.log('ajax callback fired.' + data); })} EDITAR:
Parece que solo sucede cuando se usa con la siguiente función:
function enviarLogByEntering(){ let log = document.getElementById('logContent');
log.addEventListener("keyup", function(event) { // Number 13 is the "Enter" key on the keyboard if (event.keyCode === 13) { // Cancel the default action, if needed event.preventDefault(); submitLog(); } }); }Cuando uso el botón para duplicar el problema, no puedo hacer que se repita.
¡Muchas gracias de antemano por cualquier consejo que me lleve en la dirección correcta para solucionar este problema!
Lo más probable es que dependa del oyente de submitLog() .
Verifique que no esté utilizando un oyente que dispararía múltiples.
Si es demasiado para verificar, simplemente configure una variable de prueba fuera de su submitLog() , configúrelo en verdadero y pruebe si es verdadero, luego active el ajax. Luego configúrelo en falso después de su solicitud de publicación. Esto evitará que se presionen botones duplicados, etc. o cualquier cosa divertida en el oyente.
Si necesita volver a activar la función, establezca un tiempo de espera en la variable (o configúrelo después de completar ajax) para restablecerlo a verdadero.
EJEMPLO:
var test = true; function submitLog() { if (test) { let log = document.getElementById('logContent').value; let project = document.getElementById('logger_active_project').innerHTML; let category = document.getElementById('categorySelect').value; let projectID = document.getElementById('logger_active_project_id').value; let submit = document.getElementById('submit'); submit.disabled = true; console.log('starting ajax post request'); $.post('./includes/logger/scripts/add_log.php', { log: log, project: project, category: category, project_id: projectID }, function (data, status) { document.getElementById('logContent').value = ""; submit.disabled = false; console.log('ajax callback fired.' + data); }); test = false; setTimeout(function () { test = true; }, 5000); } }