Nuestros investigadores estrellas han agotado sus depósitos de café, por su búsqueda todo el tiempo por la solución, hasta que Eva halló el resultado en Bitbucket por lo tanto en este momento la comparte contigo.
Solución:
En Javascript, es imposible que una función return
un resultado asíncrono. La función generalmente regresará antes de que se realice la solicitud AJAX.
Siempre puede forzar su solicitud para que sea sincronizada con async: false
pero por lo general no es una buena idea porque hará que el navegador se bloquee mientras espera los resultados.
La forma estándar de evitar esto es mediante una función de devolución de llamada.
function ajax_test(str1, callback)
jq.ajax(
//... your options
success: function(data, status, xhr)
callback(data);
);
y luego puedes llamarlo así:
ajax_test("str", function(url)
//do something with url
);
Aquí está mi código de ejemplo para recuperar datos de php y luego pasar el valor a una variable global de javascript dentro de la función de éxito de ajax. ¡Esto funciona para mi!
var retVal = null;
function ajaxCallBack(retString)
retVal = retString;
function readString(filename)
$.ajax(
type: "POST",
url: "readString.php",
data: 'fn': filename ,
success: function(response)
ajaxCallBack(response);
);
Código PHP (readString.php):
Sin embargo, como $.ajax() envió solicitudes de forma asíncrona, lo que significa que puede regresar antes de que se ejecute la devolución de llamada exitosa, no debe confiar en que se ejecuta secuencialmente y devolver el valor por sí mismo. Por lo tanto, aquí asignamos el valor de respuesta de php al valor global en la función de devolución de llamada.
Recuerda recomendar este escrito si lograste el éxito.