Estoy usando Ajax para insertar datos en MySQL con PHP, vea mi código a continuación:
var c = 0;//initialize counter function add(){ for (var i = 0; i < 10; i++) { $.ajax({ type: "POST", url: "insert.php", data: { id: id, name: name, email: email, }, dataType: "json", success: function (res) { c++;//increment counter }, }); } alert(c);//display counter }lo que quiero hacer es mostrar la alerta (la cantidad de veces que se realiza la operación de inserción) después de que finalice el ciclo for. Lo hice como el código anterior, no funciona. siempre muestra cero.
¿Hay alguna manera de hacer la misma funcionalidad?
de esta manera funciona.
var c = 0; async function add() { for (var i = 0; i < 10; i++) { await $.ajax({ type: "POST", url: "https://upwork.codefusiontm.com/stack/002", data: { id: "id", name: "name", email: "email", }, dataType: "json", success: function (res) { c++;//increment counter }, }); } } $(() => { add().then(() => { console.log("=>",c) }) })Debe usar Promisse con el uso de async y esperar . Usas asíncrono y creas el método de agregar como asíncrono
async function add() {Después de eso, agrega await en $.ajax porque solo de esta manera, ajax solo incrementará c ++ solo después de que POST regrese, esto debe hacerse porque inicia varios POST dentro del for, por lo que debe esperar la finalización de cada para poder incrementar correctamente.
await $.ajax({En conclusión, finalmente puedes obtener el valor de la variable c
$(() => { add().then(() => { console.log("=>",c) }) })No olvide que la llamada al método debe realizarse dentro de document.ready
$(() => { })Considera lo siguiente.
var c = 0; //initialize counter function add() { for (var i = 0; i < 10; i++) { $.ajax({ type: "POST", url: "insert.php", data: { id: id, name: name, email: email, }, dataType: "json", success: function(res) { c++; if (i == 10) { alert(c); //display counter } }, }); } } Cuando realice el último ciclo, i será 9 y luego se incrementará a 10. Entonces podemos verificar si i es igual a 10 , y luego sabemos que el ciclo se ejecutó la última vez.