2012-09-18 102 views
6

隨着我的框架的增長,我決定將其分割成文件,而不是將其保留在主設計文件中。但是,通過這樣做,函數的返回不會返回任何值。變量不會從AJAX函數返回

數據不是空的 - 如果我提醒他們在那裏的js文件中的值!

功能:

1日(包含在執行前)在.js文件中的函數

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

所以,這裏是執行部:

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

和測試空...我已經嘗試了不同的寫作方式,但我想我錯過了js的可能性?

+0

使異步:false。 – Tuscan

+4

@Tuscan號[async:false已被棄用,總是一個壞主意](http://api.jquery.com/jQuery.ajax/) –

+0

可能的重複[如何從Ajax調用返回響應?] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) –

回答

9

你不能這樣做:因爲調用是異步的,所以get_data函數不能返回ajax調用的結果。

你應該做的是提供一個回調到get_data函數並處理回調中的結果。

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

,並調用它像:

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

嚴重感謝沒有考慮回調!當然,它現在可以工作:)... –