0

ApiTokenCallBack 関数からグローバル変数を設定できません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

問題は、AJAX非同期リクエストに関連していた。コードを一意のコールバック関数に配置して、問題を解決しました。

于 2012-11-21T07:07:42.053 に答える
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 に答える