免责声明 - 我已经查看了现有的 SO 条目,并拼凑了一些应该有效但仍然无效的东西。
我有以下功能。基本上,它将一对值发送到 web 服务,结果以 JSON 形式返回:
getPicklist: function () {
var xhrArgs = {
url: 'myUrl',
postData: dojo.toJson({
'opportunityId': 'myOppId',
'loggedInUserId': 'myUserId' //App.context.user.$key
}),
headers: {
"Content-Type": "application/json"
}
}
var deferred = dojo.xhrPost(xhrArgs);
deferred.then(
function (data) {
var jsonResponse = dojo.fromJson(data);
picklistName = jsonResponse.PicklistName;
if (!picklistName) {
picklistName = "defaultPickListName";
}
return picklistName;
},
function (error) {
alert("Could not load picklist " + error);
});
;
//return picklistName; -- null
}
读完后我的理解: anonymous js function with xhrpost dojo not return data
是否在此函数范围之外添加变量以及使用 dojo.deferred 可以解决问题。我尝试在函数外部放置一个 var,并将对象分配给 picklistName 变量。
但是,我仍然无法获得此函数的结果(picklistName 变量)。
有人可以澄清我做错了什么,我该如何解决?
编辑 - 在做出 Thomas Upton 建议的更改后,我离得更近了,但我遇到了一个奇怪的错误。
我在 getPicklist 之后添加了以下函数:
returnPicklistName: function () {
this.getPicklist().then(function (picklistName) {
return picklistName;
})
},
因为我真正想要的只是选择列表(有我真正想要的 JSON,但我现在只满足于选择列表)。
这会在 Chrome 开发工具中引发以下错误 - Uncaught TypeError: Object [object Object] has no method 'getPicklist'。
我还错过了什么?谢谢。