【发布时间】:2013-11-01 01:02:20
【问题描述】:
我知道这是一个函数 101 类型的问题,但我们都需要学习。
我有一个 AJAX 调用函数(下面的 sn-p)存储在我自己的库 .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”选项),并且所有变量都在我的警报语句中正确填充,然后再进行任何进一步的下游处理[似乎]发生了。
【问题讨论】:
-
Possible Duplicate。简短的回答 - 这不是异步请求在 JS 中的工作方式。长答案在链接中:)
-
显示更多完整的脚本,复制和粘贴可能会发现拼写错误,它有助于社区更好地了解依赖关系和程序流程等。
-
感谢您迄今为止的所有反馈。我已经编辑了这篇文章以提供更多的代码细节,尽管这样做承认这给问题带来了明确的 SharePoint 倾斜。
标签: javascript function