Javascript Jquery ajax调用将成功值分配给窗口
我正在尝试从后端获取一些URL,并在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
窗口中分配数据。结果
。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)的操作)代码>在那条线内?是的,我试过了,但还是给了我未定义的