当从另一个函数调用时,Javascript函数返回undefined
当我在一个函数中调用一个函数时,它返回当从另一个函数调用时,Javascript函数返回undefined,javascript,jquery,Javascript,Jquery,当我在一个函数中调用一个函数时,它返回undefined。当函数本身被调用时,它返回我期望它返回的数据 职能: function companyNumbers(account_id) { $.ajax({ type: "GET", url: "http://example.com/api/api_client_relationships/" + account_id, dataType: 'json', success: f
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
}
});
}
功能公司编号(帐户id){
$.ajax({
键入:“获取”,
url:“http://example.com/api/api_client_relationships/“+帐户id,
数据类型:“json”,
成功:功能(数据){
对于(var i=0;i您正在尝试从异步回调返回值。回调中的返回数据
不会将数据返回给公司名称
的调用者。相反,将回调传递给公司名称
,并通过以下方式返回数据:
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);
});
}
}
});
}
功能公司编号(帐户id){
$.ajax({
键入:“获取”,
url:“http://example.com/api/api_client_relationships/“+帐户id,
数据类型:“json”,
成功:功能(数据){
对于(var i=0;i欢迎来到ajax世界,您不能让浏览器等待返回,因为它是异步的。相反,您应该使用回调函数:
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
}
这是因为函数companyNames启动一个异步进程。它在启动ajax调用后立即返回,其返回值未定义,因为函数本身没有指定返回值,只是在ajax调用实际完成后调用的函数。异步调用不是同步的!谢谢。我仍然很抱歉在javascript中获得异步调用和同步调用之间的差异。非常有用。