0

我正在从我的 index.html 文件中调用一个函数。该函数在我在 html 中引用的 javascript 文件中定义。但是,返回值始终是未定义的。当我调试时,我可以看到返回字符串中的值。

以下是 index.html 中的代码

<script type="text/javascript">
function readQueryStringparam(name) 
    {

        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec(window.location.href);
        if (results == null)
        return "";
        else
        return results[1];
    } 


function getDiDataUrlPrefix() 
{

             diDataUrlPrefix = diGlobal.instanceInfo.getDiDataUrlPrefix();
            //alert(diDataUrlPrefix);   
            sbu = readQueryStringparam('sbu');
            appid = readQueryStringparam('appid');


            if (sbu.length > 0) 
            {
                sbu = sbu.trim();
                CreateChart(diDataUrlPrefix,sbu,0,appid);
            }
            else if (appid.length > 0)
                {

                    sbu = GetSBUForApplication(appid);
                    CreateChart(diDataUrlPrefix,0,0,appid);
                }
}

 </script>

我得到了 url 中提供的参数的值以及 diDataUrlPrefix。

以下是 javascript 文件中的代码:

function GetSBUForApplication(appid)
{
    setTimeout(function() { }, 10000);
    var string;
    var file = diDataUrlPrefix + "/oss/csvs/Consolidated_RAG.csv";

    d3.text(file, function(datasetText) 
        {

            parsedCSVapp = d3.csv.parseRows(datasetText);


            if (appid >0)
            {
                    parsedCSVapp = parsedCSVapp.filter(function(row)
                    {
                        //alert(parsedCSVapp);
                        return row[0] == appid



                    })//parsed fileter ends here

                returnstring = parsedCSVapp[0][4];



            }

        })



    return returnstring;

}

但是 sbu 的值始终未定义。但是我可以在 parsedCSVapp 中看到值。csv 文件如下所示:

Application_Id,Application Name,Status,Name,Business Unit 200039,DEALING,RED,Marc Begun,Financial&Risk 200070,NGTX,RED,Marc Begun,Financial&Risk 200097,WORLD-CHECK,RED,Graham Fisher,Financial&Risk 200009,BOARDLINK,RED,Jennifer西蒙,财务与风险 200088,汤姆逊一号,RED,Jonathan Weinberg,财务与风险 200037,DATASTREAM,RED,Ian Brocklehurst,财务与风险 200044,EIKON,RED,Olivier Martin,财务与风险 200011,协作,RED,Frank Tarsillo,财务与风险

4

1 回答 1

1

d3.text(和d3.csvd3.json和类似的)进行异步调用。也就是说,当您运行代码时,会进行调用并继续执行,而无需等待调用返回。这些函数的第二个参数是调用返回时执行的函数——回调。

此函数不会在您运行的同时执行d3.text,而是稍后执行。您无法确定它将在什么时间运行。由于这些调用之一而要调用的任何代码都需要作为回调函数的一部分运行,或者从那里调用。

于 2013-10-09T09:33:51.410 回答