在我下面的代码中,如果我在函数 __call 中初始化它,我不明白为什么在最终的 console.log 变量 bearer_token 中未定义。
home: function () {
var bearer_token;
var cb = new Codebird;
cb.setConsumerKey("Zox*O8n1u", "zaCTe5oI23bxx***CG87e8hkgZgBeIHV7LKp");
cb.__call(
"oauth2_token", {},
function (reply) {
var bearer_token = reply.access_token;
}
);
$.ajax({
url: "http://search.twitter.com/search.json?q=felpone",
dataType: "jsonp",
jsonpCallback: "myFunction",
beforeSend: function (xhr, settings) {
xhr.setRequestHeader('Authorization', 'Bearer ' + bearer_token);
}
});
function myFunction(r) {
console.log(r);
}
console.log(bearer_token);
},
最佳答案
两种可能性:
function (reply) {
var bearer_token = reply.access_token;
}
这段代码将 reply.access_token
分配给 bearer_token
在该函数内部,而不是在函数外部。这意味着如果该代码运行,它不会影响外部 bearer_token
。为此,请删除 var
。
接下来,我注意到该函数有一个“oauth2_token”字符串。 __call
是异步调用吗?如果是这样,那么它旁边的函数就是回调。当您执行 console.log(bearer_token)
时,响应可能尚未到达。要在异步操作的响应返回后执行代码,请将所有应在响应到达后运行的代码放在回调中。
这应该有效:
home: function () {
var cb = new Codebird;
cb.setConsumerKey("Zox*O8n1u", "zaCTe5oI23bxx***CG87e8hkgZgBeIHV7LKp");
cb.__call("oauth2_token", {}, function (reply) {
var bearer_token = reply.access_token;
console.log(bearer_token);
$.ajax({
url: "http://search.twitter.com/search.json?q=felpone",
dataType: "jsonp",
beforeSend: function (xhr, settings) {
xhr.setRequestHeader('Authorization', 'Bearer ' + bearer_token);
}
}).done(function (data) {
console.log(data);
});
});
},
关于Javascript 变量作用域行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23035808/