La variable no se devuelve desde la función AJAX

Resuelto Ivan Schrecklich asked hace 12 años • 2 respuestas

A medida que mi marco crece, decidí dividirlo en archivos, en lugar de dejarlo en el archivo de diseño principal. Sin embargo, al hacer eso, el retorno de una función no devuelve ningún valor.

los datos no están vacíos; si alerto a los valores en el archivo js, ​​¡están ahí!

Las funciones:

Primero, la función en el archivo .js (se incluye antes de la ejecución)

             var lock_get = 0;
             function get_data(data, destination) 
             {

                if (lock_get == 0)
                {
                    lock_get = 1;
                    $.ajax({
                        type: "POST",
                        url: destination,
                        async: true,
                        data: data,
                        success: function(data) 
                        {
                            lock_get = 0;
                            if (data)
                            {
                                return data;
                            }
                        }
                    });
                }
             };

Entonces y aquí está la parte de ejecución:

    var test = get_data(data, destination);
    notice(test);

y la prueba está vacía... Ya probé diferentes formas de escribir, pero supongo que no entendí bien las posibilidades de js.

Ivan Schrecklich avatar Sep 18 '12 17:09 Ivan Schrecklich
Aceptado

No puedes hacer eso: como la llamada es asincrónica, la función get_data no puede devolver el resultado de la llamada ajax.

Lo que debes hacer es proporcionar una devolución de llamada a la función get_data y manejar el resultado en la devolución de llamada.

function get_data(data, destination, callback) 
         {

            if (lock_get == 0)
            {
                lock_get = 1;
                $.ajax({
                    type: "POST",
                    url: destination,
                    async: true,
                    data: data,
                    success: function(data) 
                    {
                        lock_get = 0;
                        if (data && callback)
                        {
                            callback(data);
                        }
                    }
                });
            }
         };

Y llámalo así:

get_data(data, destination, function(test){
   notice(test);
});
Denys Séguret avatar Sep 18 '2012 10:09 Denys Séguret