首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将成功值分配给窗口的Jquery ajax调用

将成功值分配给窗口的Jquery ajax调用
EN

Stack Overflow用户
提问于 2016-12-21 20:02:29
回答 1查看 621关注 0票数 3

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

我有这个代码

代码语言:javascript
运行
复制
(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在加载时正在打印,它给了我正确的地址,然后我尝试传递window.__env.saveWorkflowDefinition来指定另一个文件xfunction.js,其中我想使用window.__env,但它给了我undefined

但是,如果我像这样传递它,而不调用ajax,它就可以正常工作。

代码语言:javascript
运行
复制
(function(window){
window.__env = window.__env || {};
     window.__env.saveWorkflowDefinition= 'www.mybaseurl.com/api/Management/';
   })

谁能指出为什么当我在做ajax调用时把它传递给xfunction.js时,它会返回undefined

EN

回答 1

Stack Overflow用户

发布于 2016-12-21 20:50:00

由于Ajax调用将仅异步提供响应,因此不能期望在相同的同步执行上下文中具有响应。

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

代码可能如下所示:

代码语言:javascript
运行
复制
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.
    // ...
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41262402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档