Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery ajax调用将成功值分配给窗口_Javascript_Jquery_Ajax - Fatal编程技术网

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

Javascript Jquery ajax调用将成功值分配给窗口,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试从后端获取一些URL,并在窗口中分配数据。结果。uu env.{variable},以便我可以在应用程序中的任何位置使用它 我有这个密码 (function(window){ window.__env = window.__env || {}; $.ajax({ url: './assets/js/config/config.json', method: 'GET', success: function (data) { let baseU

我正在尝试从后端获取一些URL,并在
窗口中分配
数据。结果
。uu 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,然后我尝试传递
窗口。\uu env.saveWorkflowDefinition
来表示另一个文件
xfunction.js
,我想在其中使用
窗口。\uu env
但它给了我
未定义的

但是,如果我在没有ajax调用的情况下像这样传递它,它就可以正常工作

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

有人能指出为什么在执行ajax调用时,当我将其传递给
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.
    // ...
});

传递
窗口。uu env.saveWorkflowDefinition
xfunction.js
它给了我未定义的信息。我不明白这一点,到底什么是
xfunction.js
?它是我想使用
窗口的另一个文件。\uu env.
,我怀疑,您试图在使用值定义数据之前访问数据。由于您以异步方式分配数据,因此不存在发生这种情况的预定义时间。您确定在Ajax完成后尝试访问
窗口。\uu env.saveWorkflowDefinition
?我不是问您在调用函数
workflowDefinition
之后,但在异步ajax完成加载之后,是否正在访问
窗口。\uu env.saveWorkflowDefinition
。您如何确保这一点?我建议您在
xfunction.js
中使用此ajax脚本,以便您可以使用promise/deferred对象监控ajax请求的完成情况,这是一个很容易完成的过程,显示
预期和预期的声明或声明当我把那行代码//放在其他文件中。
window.promiseWorkFlowDefinition.then(saveWorkflowDefinition){//在这里使用saveWorkflowDefinition。这被称为异步。//…})此代码在文本编辑器中显示错误。修复了最后几行中的语法错误:
函数
之后丢失,然后
。然后我可以执行类似于
控制台.log(saveWorkflowDefinition)的操作‌)在那条线内?是的,我试过了,但还是给了我
未定义的