Tengo varias llamadas ajax que publican datos en la base de datos a través de métodos web cuando se hace clic en el botón Enviar.
Cuando un usuario hace clic en el botón Enviar, aparece un cuadro de alerta que le pide al usuario que verifique su pedido antes de enviarlo a la base de datos.
Cuando todo se ve bien y el usuario hace clic en el botón Enviar, los datos se publican correctamente en la base de datos.
Esta parte está funcionando bien.
El problema es que cuando el usuario hace clic en Cancelar, los datos aún se publican en la base de datos, aunque esta vez, los registros en blanco se publican en la base de datos.
Mi pregunta es ¿por qué se siguen publicando datos cuando el usuario hace clic en cancelar?
Al hacer clic en la opción Cancelar, no debería activarse la llamada ajax.
¿Qué me estoy perdiendo?
Aquí hay un código relevante. Se proporcionará más código si se solicita.
function getAllCreditorData() { var data = []; $('tr.data-contact-person8').each(function () { var creditname = $(this).find('.creditorname01').val(); var creditaddress = $(this).find('.creditoraddress01').val(); var creditincome = $(this).find('.creditorincome01').val(); var alldata = { 'myCreditorname': creditname, 'myCreditoraddress': creditaddress, 'myCreditorincome': creditincome } data.push(alldata); }); console.log(data); return data; } $("#btnSubmit").click(function (event) { event.preventDefault(); if (confirm('Please review your order before submitting. Click Ok to submit; Cancel to make additional changes')) { var empComplete = false, sourceComplete = false, spouseComplete = false, dividentComplete = false, reimbursedComplete = false, honorariaComplete = false, giftComplete = false, orgComplete = false, creditorComplete = false; function checkComplete() { if (empComplete && sourceComplete && spouseComplete && dividentComplete && reimbursedComplete && honorariaComplete && giftComplete && orgComplete && creditorComplete) { $("#result").text("Thank you! You have successfully completed this form"); } } } $("#result").text(""); var data = JSON.stringify(getAllEmpData()); console.log(data); $.ajax({ url: 'disclosures.aspx/SaveEmpData', type: 'POST', contentType: 'application/json; charset=utf-8', data: JSON.stringify({ 'empdata': data }), async: false, success: function () { empComplete = true; checkComplete(); }, error: function () { alert("Error while inserting data"); } });Gracias por tu ayuda
Su llamada ajax está fuera de su condición if.
$("#btnSubmit").click(function (event) { event.preventDefault(); if (confirm('Please review your order before submitting. Click Ok to submit; Cancel to make additional changes')) { $.ajax({ url: 'disclosures.aspx/SaveEmpData', type: 'POST', contentType: 'application/json; charset=utf-8', data: JSON.stringify({ 'empdata': data }), async: false, success: function () { empComplete = true; checkComplete(); }, error: function () { alert("Error while inserting data"); } }); var empComplete = false, sourceComplete = false, spouseComplete = false, dividentComplete = false, reimbursedComplete = false, honorariaComplete = false, giftComplete = false, orgComplete = false, creditorComplete = false; function checkComplete() { if (empComplete && sourceComplete && spouseComplete && dividentComplete && reimbursedComplete && honorariaComplete && giftComplete && orgComplete && creditorComplete) { $("#result").text("Thank you! You have successfully completed this form"); } } } $("#result").text(""); var data = JSON.stringify(getAllEmpData()); console.log(data);Debe incluir el código $ajax dentro de la declaración if que le pide al usuario que confirme () si desea enviar o no.
Su instrucción if verifica la confirmación del usuario. Pero el código del ajax nos llama no dentro del paréntesis de la declaración if. Está fuera de ellos. Por lo tanto, se ejecutará ya sea que la declaración sea verdadera o no.
-RH