簡體   English   中英

可變范圍Dojo xhrPost

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM