从多个返回值构建JavaScript选项数组
我正在尝试构建一个基线JS文件,将其包含在我的一些页面中,以从SharePoint网站返回信息。我想为以下内容对服务器进行三次ajax调用:siteGroups、siteRoles和currentUser信息,并构建一个选项数组,我可以稍后使用点符号访问它。(例如options.siteGroup、options.siteRoles、options.currentUser.UserName等)从多个返回值构建JavaScript选项数组,javascript,arrays,sharepoint,javascript-objects,Javascript,Arrays,Sharepoint,Javascript Objects,我正在尝试构建一个基线JS文件,将其包含在我的一些页面中,以从SharePoint网站返回信息。我想为以下内容对服务器进行三次ajax调用:siteGroups、siteRoles和currentUser信息,并构建一个选项数组,我可以稍后使用点符号访问它。(例如options.siteGroup、options.siteRoles、options.currentUser.UserName等) var选项=(函数(){ var currentUser=(函数(){ var userInfo=[]
var选项=(函数(){
var currentUser=(函数(){
var userInfo=[];
功能完成(数据){
对于(i=0;i
当我输入console.log(选项)时;我得到了一个具有正确值的数组,但是每个组合(options.currentUser、options.currentUser.userName等)都产生了userName未定义或者currentUser[0]无法在位置0处找到值。提前感谢您的帮助
“Image of console.log”您没有从选项功能模块返回任何内容,是吗?尝试将
return{siteoles,siteGroups,currentUser}
放在最外层函数末尾之前。如你所见,我使用对象而不是数组。我同意。很抱歉我漏掉了那部分。我把它放在里面了。我添加了一张回应的图片,以及我目前如何访问itI,但我仍然没有弄清楚这一点。希望我的第一条评论不会让人困惑。看起来您调用异步js代码是为了填充几个数组,但您试图在请求完成之前访问数组中的元素。您需要一种跟踪何时加载所有数据的方法。(一个简单的计数器可以工作)。不过,如果你真的需要一次加载所有的数据,也许可以重新考虑你解决问题的方法。只是一个建议。我相信数据在我调用之前已经加载了。或者至少在扩展对象时,我推送到它的所有数据都如我所愿。问题是访问它。图片显示了我从console.log(siteData)和console.log(siteData.currentUser)=[]>[0]:groupId:123[1]:groupName:Adam获得的信息。问题是,返回“groupName”的console.log(siteData.currentUser[0].groupName)不是定义的变量
var options = (function(){
var currentUser = (function(){
var userInfo = [];
function complete(data){
for(i = 0; i < data.d.Groups.results.length; i++){
var user = {groupId : data.d.results[i].groupId, groupName :
data.d.results[i].groupName, UserName : data.d.UserName, UserId :
data.d.UserId};
UserInfo.push(user);
}
};
getCurrentUser(url, query, complete);
return userInfo;
})();
// Get All Site Permission Groups
var siteGroups = (function(){
function complete(data){
var siteGroups = [];
for(j = 0; j < data.d.results.length; j++){
var group = {groupName : data.d.results[j].Title, groupId :
data.d.results[j].Id};
siteGroups.push(group);
};
$('.SiteGroups').append(option);
};
getSiteGroups(url, complete);
return siteGroups;
})();
// Get All Role Definitions to be used for role assignment
var siteRoles = (function(){
var roles = [];
function complete(data){
var option;
for(s = 0; s < data.d.results.length; s++){
var role = {roleId : data.d.results[s].Id, roleName :
data.d.results[s].Name};
roles.push(role);
}
}
getRoleDefinitions(url, complete);
return roles;
})();
return {currentUser, siteRoles, siteGroups};
})();