免責事項 - 既存の 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 開発ツールで次のエラーがスローされます - Uncaught TypeError: Object [object Object] has no method 'getPicklist'.
私は他に何を逃したのですか?ありがとう。