我无法从CallBack函数ApiToken
设置全局变量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);
});
答案 0 :(得分:0)
在函数内部声明变量ApiToken,因此它只存在于该函数中 - 而不是它。为了使它成为全局的,只需在函数之外声明它......
var ApiToken;
$(document).ready(function () {
// General Settings
var ApiUriGetToken, ApiUriGetPlaylist,
ApiSettings = {
clientId: encodeURIComponent('aaa'),
clientSecret: encodeURIComponent('bbb')
};
你仍然在函数内部使用它完全相同,但它全局存在,所以其他所有东西都可以引用它。
答案 1 :(得分:0)
问题在于连接AJAX异步请求。我将代码放在一个独特的回调函数中,解决了这个问题。