gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:41:18 24 4
gpt4 key购买 nike

我正在尝试从后端获取一些网址并在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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com