gpt4 book ai didi

javascript - 可变作用域 Dojo xhrPost

转载 作者:行者123 更新时间:2023-11-28 01:58:46 25 4
gpt4 key购买 nike

免责声明 - 我已经审查了现有的 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 returning data

在该函数作用域之外添加一个变量并使用 dojo.deferred 是否可以解决该问题。我尝试在函数外部放置一个 var,并将该对象分配给 picklistName 变量。

但是,我仍然无法获取该函数的结果(picklistName 变量)。

有人可以澄清我做错了什么,以及如何解决它吗?

编辑 - 进行托马斯厄普顿建议的更改后,我更接近了,但我收到了一个奇怪的错误。

我在 getPicklist 之后添加了以下函数:

    returnPicklistName: function () {
this.getPicklist().then(function (picklistName) {
return picklistName;
})
},

因为我真正想要的是选项列表(我确实想要 JSON,但我现在只满足于选项列表)。

这会在 Chrome 开发工具中引发以下错误 - Uncaught TypeError: Object [object Object] has no method 'getPicklist'。

我还错过了什么?谢谢。

最佳答案

您需要返回 promise,而不是在 getPicklist 末尾返回 picklistName -- 此处是 then() 的结果 -- 并添加一个回调,该回调将在延迟解析时接收 picklistName

getPicklist: function () {
// ...
var deferred = dojo.xhrPost(xhrArgs);
return deferred.then(
function(data) { /* get picklistName from data */ return picklistName; },
function(error) { /* ... */ }
);
}

然后,当您调用 getPicklist 时:

this.getPicklist()
.then(function(picklistName) {
// Use picklistName here
});

关于javascript - 可变作用域 Dojo xhrPost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18729639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com