在下面的代码中我不明白为什么在最终的console.log变量bearer_token是未定义的,如果我在函数__call中对其进行了对齐。
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);
},
答案 0 :(得分:4)
两种可能性:
function (reply) {
var bearer_token = reply.access_token;
}
这段代码将reply.access_token
分配给该函数中的bearer_token
,而不是函数外部的bearer_token
。这意味着如果该代码运行,它不会影响外部var
。为此,请移除__call
。
接下来,我注意到该函数有一个“oauth2_token”字符串。 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);
});
});
},
时,响应可能尚未到来。要在异步操作的响应返回后执行代码,请将响应到达回调后应运行的所有代码放在其中。
这应该有效:
{{1}}
答案 1 :(得分:0)
您已在__call范围内创建了一个新变量bearer_token。删除var。