我知道这是一个函数 101 类型的问题,但我们都需要学习。
我有一个 AJAX 调用函数(下面的代码段)存储在我自己的库 .js 文件中,它返回对象中的许多变量。
function getMyDetails(){
//does processing
return {
firstName: firstName,
office: office,
manager: manager,
workphone: workphone,
isAdministrator: isAdministrator
}
}
在我网页上的脚本中,我调用这个函数如下:
$userDetails = getMyDetails();
然后尝试像这样引用对象中的项目:
$userFirstName = $userDetails.firstName;
但是在运行脚本时,我在控制台中返回“$userDetails is undefined”错误。
问:我应该如何引用 getMyDetails() 函数以使我能够在我的页面中公开返回的变量?
更新:
我的完整功能代码在这里。为了抽象出这个问题,我没有在前面包含它,因为我正在处理一个 SharePoint 网站并使用SPServices库,因此我的 AJAX 调用被包装在一个单独的库函数中
function getMyDetails(){
var $userName = $().SPServices.SPGetCurrentUser({fieldName: "Name", debug: true });
$().SPServices({
operation: "GetUserProfileByName",
async: false,
AccountName: $userName,
completefunc: function (xData, Status) {
var firstName = getUPValue(xData.responseXML, "FirstName");
var office = getUPValue(xData.responseXML, "Office");
var manager = getUPValue(xData.responseXML, "Manager");
var workphone = getUPValue(xData.responseXML, "WorkPhone");
var SharepointAdministrator = getUPValue(xData.responseXML, "SharepointAdministrator");
alert("What I've got is " + firstName +" and " + office +" and " + manager +" and " + workphone +" and " + SharepointAdministrator);
return {
firstName: firstName,
office: office,
manager: manager,
workphone: workphone,
SharepointAdministrator: SharepointAdministrator
}
}
});
function getUPValue(x, p) {
var thisValue = $(x).SPFilterNode("PropertyData").filter(function() {
return $(this).find("Name").text() == p;
}).find("Values").text();
return thisValue;
}
}
虽然我承认这 [通常] 不是好的做法,但我正在同步进行 AJAX 调用(使用 'async: false' 选项),并且在任何进一步的下游处理之前,所有变量都在我的警报语句中正确填充 [似乎] 发生。