当我在函数中调用函数时,它返回undefined
。当函数自己调用时,它返回我希望它返回的数据。
功能:
function companyNumbers(account_id) {
$.ajax({
type: "GET",
url: "http://example.com/api/api_client_relationships/" + account_id,
dataType: 'json',
success: function(data) {
for(var i=0;i<data.length;i++){
console.log(companyNames(data[i].company_id)); // returns undefined
}
}
});
}
function companyNames(id) {
$.ajax({
type: "GET",
url: "http://example.com/api/api_company_names/" + id,
dataType: 'text',
success: function(data) {
return data; // returns valid result when not called within another function
}
});
}
data[i].company_id
只是从返回的json响应中解析的值。它充当传递给companyNames函数的参数。
答案 0 :(得分:1)
您尝试从异步回调中返回值。回调中的return data
不会将数据返回给companyNames
的调用者。相反,将回调传递给companyNames
并通过以下内容返回数据:
function companyNames(id, callback) {
$.ajax({
type: "GET",
url: "http://example.com/api/api_company_names/" + id,
dataType: 'text',
success: function(data) {
callback(data);
}
});
}
然后companyNumbers
成为:
function companyNumbers(account_id) {
$.ajax({
type: "GET",
url: "http://example.com/api/api_client_relationships/" + account_id,
dataType: 'json',
success: function(data) {
for(var i=0;i<data.length;i++){
companyNames(data[i].company_id, function(data) {
console.log(data);
});
}
}
});
}
答案 1 :(得分:0)
欢迎来到ajax的世界,你不能让浏览器等待返回,因为它是async。相反,您应该使用回调函数:
companyNames(data[i].company_id, function(info){console.log(info)});
function companyNames(id, call_back) {
success: function(data) {
call_back(data); // returns valid result when not called within another function
}
答案 2 :(得分:0)
这是因为函数companyNames启动了异步过程。它在启动ajax调用后立即返回,并且它的返回值是未定义的,因为函数本身没有指定返回值,只是在ajax调用实际完成后调用的函数。