22 Votos

jQuery: Cómo esperar la respuesta de POST o GET para escribirlo a una variable global

Pregunta de Progger99 | 30/10/2021 a las 20:59

Me gustaría cargar algunos datos nuevos con una función en jQuery para procesarlos más adelante en un lugar diferente en mi script global. Este es mi código hasta ahora:

var num = 0;
 
$.get("myscript.php", {id: id}, function(response){
   num = response;
});
 
alert(num); // todavía 0!!!

El problema es: No importa lo que establece la variable "num" en la función de recarga, siempre es 0 al final!

Incluso si establece "num" a algo diferente en la función a mano o si yo uso GET en lugar de POST, ¡no funciona! ¿Alguien tiene una solución para este problema?

ResponderPositivoNegativo
2Mejor Respuesta2 Votos

Para entender este proceso, debe saber que las funciones de jQuery .post() y .get() ambos funcionan de forma asíncrona.

Esto significa lo siguiente: mientras se ejecuta .post() o .get(), el script no está esperando la respuesta o el resultado de esa función. En su lugar, el script continuará inmediatamente. Por lo tanto, antes de que su variable se pueda configurar en otro valor (cargando el script finalmente toma un poco de tiempo), la variable ya está enviada y, por lo tanto, sigue siendo su valor inicial.

Si consciente de .post() y .get() son simplificaciones de la función .ajax(), simplemente puede usar la función .ajax() en su lugar especificando, que la función no debe ejecutarse de manera asíncrona (async:false):

var num = 0;
 
$.ajax({
   type: "GET",
   url: "myscript.php",
   async: false,
   data: {id:id},
   success: function(response) { num = response; }
});
 
alert(num);

Con esto, debería funcionar. Ahora, la función debe esperar, hasta que el valor esté allí.
29/10/2021 a las 22:34

ResponderPositivo Negativo
Responder

Temas Relacionados

Aviso Importante

Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.

Participar

Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.