Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当从另一个函数调用时,Javascript函数返回undefined_Javascript_Jquery - Fatal编程技术网

当从另一个函数调用时,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中获得异步调用和同步调用之间的差异。非常有用。