我在可变结果中使用函数表达式的属性中有一个JS对象。
我需要填充结果变量并在调用processData时返回它。
你能否告诉我这里我做错了什么,如果你简要解释一下这个问题并添加一个好的馅饼就会很棒。
$(document).ready(function () {
// General Settings
var
ApiSettings = {
clientId: 'aaa',
clientSecret: 'bbb'
}
ApiSettings.uriGetToken = 'https://ccc.com/oauth/token?grant_type=client_credentials&client_id=' + encodeURIComponent(ApiSettings.clientId) + '&client_secret=' + encodeURIComponent(ApiSettings.clientSecret);
ApiSettings.token = (function () {
var result; // I'm not able to set this variable
// Make an Ajax Request
$.getJSON(ApiSettings.uriGetToken, processData);
function processData(data) {
result = data.access_token;
}
return result;
})();
console.log(ApiSettings);
console.log(ApiSettings.uriGetToken);
console.log('FINAL:' + ApiSettings.token);
});
答案 0 :(得分:3)
您实际上可以使用代码设置结果变量。问题是您使用.getJSON()
这是一种异步方法。您将触发Ajax请求,然后您的JavaScript将直接返回return方法并返回结果,然后服务器才有机会响应。因此,在您有时间更新结果之前,您将从函数返回。
异步方法最初可能有点难以掌握,特别是如果您是初学者。您需要做的是重构代码,以便不使用与读取值相同的方法获取值。
另一种选择是使用同步Ajax请求,强制JavaScript在返回结果之前等待服务器响应。这很少是一个好主意,因为在服务器返回之前,您的UI将无法响应。