簡體   English   中英

Jquery ajax調用將成功值分配給窗口

[英]Jquery ajax call assigned success val to window

我正在嘗試從后端獲取一些URL並分配data.Resultswindow.__env.{variable}所以我可以在應用程序的任何地方使用它。

我有這個代碼

(function(window){
window.__env = window.__env || {};
   $.ajax({
    url: './assets/js/config/config.json',
    method: 'GET',
    success: function (data) {
        let baseUrl = data.BaseApiUrl;
        workflowDefinition(baseUrl);
    }
 })

function workflowDefinition(baseUrl) {
    $.ajax({
        url: baseUrl + 'api/Management/Configurations?name=SaveWorkflowDefinition&name=WorkflowDefinition',
        method: 'GET',
        success: function (data) {
            if (data && data.Results && data.Results[0] && data.Results[0].Value) {
                window.__env.saveWorkflowDefinition = data.Results[0].Value;
                console.log(window.__env.saveWorkflowDefinition);
            }

            if (data && data.Results && data.Results[1].Value) {
                window.__env.getWorkflowDefinition = data.Results[1].Value;
            }
        },
        error: function (error) {
            var errorMessage = "Failed to contact Workflow Server, please contact your IT administrator";
            alert(errorMessage);
        }
    })
}
}(this))

我可以看到console.log正在打印,當它加載它給我正確的URL,然后我嘗試傳遞window.__env.saveWorkflowDefinition說另一個文件xfunction.js我想使用window.__env但它給了我undefined

但是,如果我沒有ajax調用就這樣傳遞它,它可以正常工作。

(function(window){
window.__env = window.__env || {};
     window.__env.saveWorkflowDefinition= 'www.mybaseurl.com/api/Management/';
   })

當有人在進行ajax調用時將其傳遞給xfunction.js時, xfunction.js可以指出為什么返回undefined

由於您的Ajax調用只會異步提供響應,因此您不能期望在同一個同步執行上下文中獲得響應。

解決這一想法,是放棄的想法,存儲在一個全局(窗口)財產響應,但存儲,而不是一個承諾,你得到同步。

代碼可能如下所示:

window.promiseWorkFlowDefinition = $.ajax({
        url: './assets/js/config/config.json',
        method: 'GET',
    }).then(function (data) {
        return $.ajax({
            url: data.BaseApiUrl + 'api/Management/Configurations?' 
                                 + 'name=SaveWorkflowDefinition&name=WorkflowDefinition',
            method: 'GET',
        })
    }).then(function (data) {
        return data && data.Results && (data.Results[0] && data.Results[0].Value 
                                     || data.Results[1] && data.Results[1].Value)
               || ('No Results[0 or 1].Value found in:\n' + JSON.stringify(data));
    }, function (error) {
        var errorMessage = 
               "Failed to contact Workflow Server, please contact your IT administrator";
        alert(errorMessage);
    });

// Other file:
window.promiseWorkFlowDefinition.then(function(saveWorkflowDefinition) {
    // Use saveWorkflowDefinition here. This is called asynchronously.
    // ...
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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