2011-11-15 12 views
0

私はAJAXリクエスト値を受け取る必要がありますが、いつもundefinedを受け取ります。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:function(data){callback(data);}の代わりに 'success:callback'を書くことができます。 – Tadeck

+0

応答データに装飾を必要としない場合は、そうです。 –

+0

はい、この場合のように。 OPが必要な場合は、あなたが与えた 'success'コールバック定義を使用する必要があります。 – Tadeck

3

関数getMealByIdは、AJAX要求の結果を待機しません。 $.ajaxはブロックされないため、AJAX要求が完了する前にgetMealById関数が戻ります。

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