2012-09-18 21 views
6

W miarę rozwoju mojej struktury postanowiłem podzielić ją na pliki, zamiast pozostawić ją w głównym pliku projektu. Jednak zwracanie funkcji nie zwraca żadnej wartości.Zmienna nie jest zwracana z funkcji AJAX

dane nie są puste - jeśli powiadomię wartości w pliku js, są tam!

Funkcje:

1-te funkcja w pliku .js (jest wliczony przed realizacją)

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

Więc i tutaj jest częścią wykonanie:

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

i test jest puste ... Próbowałem już różnych sposobów pisania, ale chyba nie rozumiałem możliwości js?

+0

Wykonaj asynchroniczny: false. – Tuscan

+4

@ Tuscan No. [async: false jest przestarzałe i zawsze był złym pomysłem] (http://api.jquery.com/jQuery.ajax/) –

+0

możliwy duplikat [Jak zwrócić odpowiedź z połączenia Ajax?] (http://stackoverflow.com/questions/14220321/how-to-return--response-from-an-ajax-call) –

Odpowiedz

9

Nie można tego zrobić: ponieważ wywołanie jest asynchroniczne, funkcja get_data nie może zwrócić wyniku wywołania ajax.

Należy wykonać wywołanie zwrotne funkcji get_data i obsłużyć wynik w wywołaniu zwrotnym.

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

i nazwać tak:

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

Serio dziękuję nie myślałem o oddzwonieniu! Oczywiście działa teraz:) ... –

Powiązane problemy