0

我有一个 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);
});
4

1 回答 1

3

您实际上可以使用您的代码设置结果变量。问题是您使用.getJSON()的是异步方法。您将触发 Ajax 请求,然后您的 JavaScript 将直接转到 return 方法并返回结果,然后服务器才有机会响应。因此,您在有时间更新结果之前就从函数中返回。

异步方法最初可能有点难以掌握,特别是如果您是初学者。您要做的就是重组代码,这样您就不会使用与读取值相同的方法来获取值。

另一种选择是使用同步 Ajax 请求,强制您的 JavaScript 在返回结果之前等待服务器响应。但这很少是一个好主意,因为您的 UI 在服务器返回之前将无响应。

于 2012-11-09T11:57:40.170 回答