2011-11-15 157 views
0

我需要接收一個AJAX請求值,但總是收到未定義的值。JavaScript函數返回變量

Panda.Meals.getMealById = function(id) { 
    var meal = {}; 
    $.ajax({ 
    url: "http://localhost/admin.php?r=mess/getmealbyid", 
    data: {"id": id}, 
    success: function(data) { 
     meal = data; 
    } 
    }); 
    return meal; 
} 

var id = Panda.Meals.getMealById(10); 

回答

3

這是一個異步調用。您的功能將在撥打$.ajax()後立即返回。您必須爲您的getMealById提供回調功能。

看到這個例子。

Panda.Meals.getMealById = function(id, callback) { 
    $.ajax({ 
    url: "http://localhost/admin.php?r=mess/getmealbyid", 
    data: {"id": id}, 
    success: function(data) { 
     callback(data); 
    } 
    }); 
} 

Panda.Meals.getMealById(10, function(data) { 
    var id = data; 
    // do all your post processing here 
}); 
+1

+1很好的例子,但我相信在這種情況下,你可以只寫'success:callback'而不是'success:function(data){callback(data);}'。 – Tadeck

+0

是的,如果不需要對響應數據進行任何修飾,那也可以。 –

+0

是的,就像在這種情況下一樣。如果OP需要任何,那麼他將需要使用您提供的'success'回調定義。 – Tadeck

3

函數getMealById不會等待AJAX​​請求的結果。由於$.ajax不會阻止,所以getMealById函數在AJAX請求完成之前返回。

2

您的ajax調用是異步的,所以在返回值時未定義膳食。

你可以不喜歡它:

Panda.Meals.getMealById = function(id) { 
    var meal = {}; 
    $.ajax({ 
     async: false, 
     url: "http://localhost/admin.php?r=mess/getmealbyid", 
     data: {"id": id}, 
     success: function(data) { 
      meal = data; 
     } 
    }); 
    return meal; 
} 
+0

通常,由於JavaScript的工作原理,更好的方法是使用回調而不是依賴於同步AJAX調用。 – Tadeck