javascript - Jquery ajax调用将成功值分配给窗口

标签 javascript jquery ajax

我正在尝试从后端获取一些网址并在window.__env.{variable}中分配data.Results,这样我就可以在任何地方使用它应用程序。

我有这个代码

(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 时它会返回 undefined 吗?

最佳答案

由于您的 Ajax 调用仅以异步方式提供响应,因此您不能期望在同一同步执行上下文中获得响应。

解决这个问题的一个想法是放弃将响应存储在全局(窗口)属性中的想法,而是存储一个 promise ,您确实同步获得它。

代码可能如下所示:

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.
    // ...
});

关于javascript - Jquery ajax调用将成功值分配给窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41262402/

相关文章:

javascript - 如何控制 WebRTC 视频通话中的带宽?

javascript - 追加新的 <li> 并将其 ID 号增加 1

javascript - 如何检测特定 div 何时不在 View 中

javascript - 在 JSON 字符串中分隔 PHP 变量

javascript - jQuery 自定义复选框 + 隐藏 html 复选框

javascript - 在下拉列表更改事件上更新数据库

javascript - 使用 jQuery 或 javascript 计算具有不同名称的元素数量

javascript - 在正则表达式匹配上调用函数

jquery - 如何防止 div 元素在滚动时移动(不使用固定位置)?

javascript - 从 SQL 中提取表来创建 JavaScript 数组?