validacion - validar formulario javascript html5
¿Qué sucede si se muestra una ventana de alerta durante una llamada ajax? (2)
Me preguntaba qué podría pasar si, mientras se ejecuta una llamada ajax, se le avisa al usuario, en la ventana del navegador.
Digamos, por ejemplo, que tengo una llamada ajax
$.ajax({
url: ...,
type: GET/POST,
...
success: function(data){
console.log(data);
},
error: ...
});
eso toma mucho tiempo para completarse (10 segundos). Mientras se ejecuta la llamada, se lanza una simple alerta de javascript
alert("hello!");
Qué sucede, por ejemplo, si:
- Comienza la llamada ajax
- llamada ajax obtención de datos
- alerta se muestra
- la llamada ajax devuelve datos (¡la ventana de alerta todavía está abierta!)
Sabiendo que JS tiene una sola hebra, sé que la ejecución del script se detendrá, solo me preguntaba qué pasaría con la llamada / respuesta ajax si la ventana de alerta no se cierra "a tiempo".
Espero haber sido lo suficientemente claro y que esta no es una pregunta "ficticia". Gracias
Esto no es exactamente difícil de probar y ver ... pero la respuesta es que la alerta tendrá prioridad y mantendrá el flujo de ejecución.
Al cerrar la alerta, y suponiendo que la solicitud AJAX se haya completado mientras la alerta estaba abierta, se procesará la función de success
(o error
función de error
).
Tenga en cuenta que la solicitud AJAX continuará ejecutándose mientras se muestra la alerta (por lo que un AJAX de larga ejecución puede procesar mientras la alerta esté abierta), pero es solo que su secuencia de comandos no puede continuar manejando la solicitud hasta que se cierre la alerta.
Aquí hay un ejemplo de trabajo : observe que los datos no se escriben en la consola hasta que se cierra la alerta.
Otro punto a tener en cuenta es que una vez que se cierra la alerta, la secuencia de comandos continuará con el resto de la función (el código inmediatamente después de la alert
) antes de que se maneje la respuesta AJAX. Esto ayuda a demostrar lo que quiero decir
La solicitud HTTP continuará ejecutándose y procesándose en segundo plano.
Cuando el ciclo de eventos JS se libera, el controlador ReadyState Change se activará.
Algunos estados listos intermedios se pueden omitir porque el bucle de evento estaba ocupado mientras ese estado era verdadero.