从另一个函数调用时,Javascript函数返回undefined

时间:2014-05-06 17:30:33

标签: javascript jquery

当我在函数中调用函数时,它返回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函数的参数。

3 个答案:

答案 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调用实际完成后调用的函数。