[英]Variable Scope Dojo xhrPost
免責聲明-我已經審查了現有的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
}
讀完這篇文章后我的理解: xhrpost dojo的匿名js函數不返回數據
是否在此功能范圍之外添加變量,以及使用dojo.deferred可以解決此問題。 我嘗試將var放在函數外部,然后將該對象分配給picklistName變量。
但是,我仍然無法獲得此函數的結果(picklistName變量)。
有人可以澄清我做錯了什么以及如何解決嗎?
編輯-做出更改后,托馬斯·厄普頓(Thomas Upton)建議,我離得很近,但是我遇到了一個奇怪的錯誤。
我在getPicklist之后添加了以下功能:
returnPicklistName: function () {
this.getPicklist().then(function (picklistName) {
return picklistName;
})
},
因為我真正想要的只是選擇列表(確實需要JSON,但現在我只選擇這個選擇列表)。
這會在Chrome開發者工具中引發以下錯誤-未捕獲的TypeError:對象[object Object]沒有方法'getPicklist'。
我還想念什么? 謝謝。
而不是返回的picklistName
在結束getPicklist
,你需要返回一個承諾 -在這里,結果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
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.