使用Javascript通过嵌套函数返回数组

时间:2016-02-03 20:55:19

标签: javascript callback nested

大家晚上好。我知道这对许多人来说似乎是一个非常容易的主题,但我一直在努力重建我拥有的功能,以使其在整个网站范围内具有动态性和可重用性。

我遇到的主要困难是使用以下方法返回一个数组:

var arr = getData("admin/fullDatabaseAccess.php");

这不会按预期返回数组。现在,在没有将我对 getData 函数所做的每一种可能的变化写入以尝试返回它创建的数组时,我将首先向您展示有效的原始函数:

function getData() {

var xmlhttp = new XMLHttpRequest();
var url = "admin/fullDatabaseAccess.php";

xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        processResponse(xmlhttp.responseText);
    }
}
xmlhttp.open("GET", url, true);
xmlhttp.send();

function processResponse(response) {


    var arr = JSON.parse(response);

    // do stuff with the array - I originally modified the DOM using jQuery here, however I now want to use this entire getData function as a more generically useful function

    }

}

然后我会在我使用此代码的单个页面上触发 getData 函数来生成数组,然后使用数组数据修改页面元素。

这让我遇到了问题 - 我尝试通过在下面创建此版本使该功能在整个网站上可重复使用,并使用我在第一个(var arr = ..):

function getData(file) {

var xmlhttp = new XMLHttpRequest();
var url = file;

xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        processResponse(xmlhttp.responseText);
    }
}
xmlhttp.open("GET", url, true);
xmlhttp.send();

function processResponse(response) {
    var arr = JSON.parse(response);


    return arr;


}

}

我似乎无法将数据反馈给变量。我已经尝试过将重要的功能重新组合到巢中的返回值等但是我已经达到了让自己感到困惑并且无法解决的问题。真的展示了我尝试的例子,因为我删除了它们并决定重新开始。

非常感谢任何帮助!!

1 个答案:

答案 0 :(得分:2)

您需要向case class ProjectApps(name: String, versions: List[String]) object ProjectApps{ def apply(tuple: (String, List[AppInfo])): ProjectApps = ProjectApps(name=tuple._1, versions=tuple._2.map(_.version)) } case class ClientApps(name: String, projects: List[ProjectApps]) object ClientApps { def apply(tuple: (String, List[AppInfo])): ClientApps = { val name = tuple._1 val projects = tuple._2.groupBy(_.project).map(ProjectApps.apply).toList ClientApps(name, projects) } } def byClient2(appInfos: List[AppInfo]): List[ClientApps] = appInfos.groupBy(_.client).map(ClientApps.apply).toList 提供回调,例如

getData