2012-09-18 7 views
6

A medida que mi framework crece, decidí dividirlo en archivos, en lugar de dejarlo en el archivo de diseño principal. Sin embargo, al hacerlo, el retorno de una función no devuelve ningún valor.La variable no se devuelve desde la función AJAX

los datos no están vacíos, si alertar a los valores en el archivo js que están allí!

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; 
          } 
         } 
        }); 
       } 
      }; 

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

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

y la prueba es vacío ... Ya probé formas diferentes de escribir pero supongo que no entendí las posibilidades de js?

+0

Hacer asincrónico: falso. – Tuscan

+4

@Tuscan No. [async: false está en desuso y siempre fue una mala idea] (http://api.jquery.com/jQuery.ajax/) –

+0

posible duplicado de [¿Cómo devolver la respuesta de una llamada Ajax?] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) –

Respuesta

9

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

Lo que debe 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 lo llaman así:

get_data(data, destination, function(test){ 
    notice(test); 
}); 
+0

En serio, ¡gracias no estaba pensando en la devolución de llamada! Por supuesto, ahora funciona:) ... –

Cuestiones relacionadas