0

我无法ApiToken从 CallBack 函数设置全局变量processGetToken。你能解释一下原因,并发布一个代码示例吗?

$(document).ready(function () {

    // General Settings
    var ApiToken, ApiUriGetToken, ApiUriGetPlaylist,
    ApiSettings = {
        clientId: encodeURIComponent('aaa'),
        clientSecret: encodeURIComponent('bbb')
    };
    //-------------------------------------------------------------------------------------
    // URIs to xxx API:
    // Token
    ApiUriGetToken = 'https://api.xxx.com/oauth/token?grant_type=client_credentials&client_id=' + ApiSettings.clientId + '&client_secret=' + ApiSettings.clientSecret;

    //--------------------------------------------------------------------------------------
    // Asynchronous requests using Ajax

    // Get Token
    function ApiGetToken() {
        $.getJSON(ApiUriGetToken, processGetToken);
    }

    // Get Token : Callback
    function processGetToken(data) {
        ApiToken = data.access_token;   // Set the Token as Global variable
        // Update the URIs with the a Token generated
        ApiUriGetPlaylist = 'https://api.xxx.com/playlist?oauth_token=' + ApiToken + '&account=' + ApiSettings.clientId;
    }

    //--------------------------------------------------------------------------------------
    // Get Categories
    function ApiGetPlaylist() {
        ApiGetToken();  // Get a fresh Token
        $.getJSON(ApiUriGetPlaylist, processGetCategories);
    }

    // Get Categories : Callback
    function processGetCategories(data) {
        var content = '';
        // Trasvers
        $.each(data.result, function (i, element) {
            content += element.name;
        });
        // Inject in the DOM
        $('#view01-caregories').text('ciao');

    }
    //--------------------------------------------------------------------------------------

    // Testing
    ApiGetToken();
    console.log('ApiUriGetToken: ' + ApiUriGetToken);
    console.log('ApiToken: ' + ApiToken);

});
4

2 回答 2

0

您在函数内声明变量 ApiToken,因此它只存在于该函数中 - 而不是它之外。要使其全局化,只需像这样在函数外部声明它......

var ApiToken;

$(document).ready(function () {

    // General Settings
    var ApiUriGetToken, ApiUriGetPlaylist,
    ApiSettings = {
        clientId: encodeURIComponent('aaa'),
        clientSecret: encodeURIComponent('bbb')
    };

您仍然在函数内部使用完全相同的方法,但它存在于全局范围内,因此其他所有内容都可以引用它。

于 2012-11-14T10:18:09.650 回答
0

问题与 AJAX 异步请求有关。我将代码放在一个独特的回调函数中,解决了这个问题。

于 2012-11-21T07:07:42.053 回答