2011-11-15 159 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