La llamada async-ajax no funciona como se esperaba
Preparar:
Estoy haciendo una llamada ajax-jsonp, que funciona bien. La función de devolución de llamada de esto cambia el valor de una variable, "myVaraible". Justo después de la llamada, hay alguna lógica if-else que funciona con el valor de "myVaraible".
Aquí está el código:
<script>
function myfunction() {
$.ajax({
url: myURL,
dataType: "jsonp",
jsonp : "jsonp",
async: false,
jsonpCallback: "jsonpCallbackFn"
});
}
function jsonpCallbackFn(mydata) {
alert("inside jsonpCallbackFn");
if(something) {
// change value of a variable "myVariable";
}
}
$(document).ready(function() {
$("#preview_button").mouseover(function() {
myfunction();
alert("after myfunction");
// do some if-else logic based upon the value of myVariable which is updated by the call to myfunction()
});
});
</script>
El problema:
La llamada ajax permanece 'pendiente', el control se mueve al bloque if-else (ejecutándose efectivamente en el valor antiguo / obsoleto de myVariable). Y luego se completa la llamada ajax. En definitiva, de los 2.alert
cajasalert("after myfunction");
ejecuta primero y luegoalert("inside jsonpCallbackFn");
Como se puede ver, ya he configuradoasync: false,
, pero parece que no está funcionando como se esperaba. ¿Alguien puede decirme que estoy haciendo mal? Además, no estoy seguro de haber explicado correctamente todo el escenario; por favor, avíseme si se necesita más información.
Muchas gracias.