我正在使用ajax trough jquery库搞乱google的apis。 为了使用Google服务API,我需要获取一个向ClientLogin发送请求的身份验证令牌。实际上,我不知道如何将令牌传递给第二个请求。
我已将全局变量标记设置为var token = null;
我在$(document).ready event
上拨打了两个请求。
这是第一个ajax请求的代码:
$.ajax({
type: "POST",
url: "https://" + host + clientLoginEntryPoint,
data: cLRequestData(accountType, user, pwd, service),
dataType: "html",
success: function (response) {
var tokenArray = response.split("="); // Split to response tokenArray[3] is the auth token
token = tokenArray[3];
$(".status").html(token);
}
}); // END OF CLIENT LOGIN REQUEST
第二个应该使用http GET调用contacts API。
$.ajax({
type: "GET",
url: "http://" + host + googleContactEntryPoint,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'GoogleLogin auth=' + token);
xhr.setRequestHeader('GData-Version', '3.0');
},
success: function(response, textStatus, xhr) {
var names = $(response).find('entry>title').text();
$(".status").text(names);
},
error: function(xhr, status, error) {
$(".status").html(xhr.status+ " "+ xhr.statusText );
}
}); //结束Google联系请求
我遇到的问题是当我尝试在第二个请求中设置Google Authentification Header时,令牌设置为null。我已经阅读了link text但这对我不起作用。我现在必须与回调/事件有关,但我无法想象如何做到这一点。
任何帮助表示赞赏
答案 0 :(得分:3)
问题已更新:
您在第一个名为 token
的请求中重新声明了一个局部变量,因此它不会使用您使用token
启动的全局null
。
删除第一个请求中的var
关键字。
token = tokenArray[3];
如果请求按顺序运行,那么第二个请求将不会等待第一个请求在执行之前收到响应。
如果是这种情况,请将第二个请求放在function
中,然后从第一个success:
回调中调用该函数。
$.ajax({
type: "POST",
url: "https://" + host + clientLoginEntryPoint,
data: cLRequestData(accountType, user, pwd, service),
dataType: "html",
success: function (response) {
var tokenArray = response.split("="); // Split to response tokenArray[3] is the auth token
token = tokenArray[3];
$(".status").html(token);
// Call second request here
secondRequest( token ); // optionally pass the "token"
// instead of using global var
}
}); // END OF CLIENT LOGIN REQUEST
function secondRequest( token ) {
$.ajax({
type: "GET",
url: "http://" + host + googleContactEntryPoint,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'GoogleLogin auth=' + token);
xhr.setRequestHeader('GData-Version', '3.0');
},
success: function(response, textStatus, xhr) {
var names = $(response).find('entry>title').text();
$(".status").text(names);
},
error: function(xhr, status, error) {
$(".status").html(xhr.status+ " "+ xhr.statusText );
}
})
}
(在此代码中,您实际上可以删除全局token
变量,并将token
从第一个请求传递给第二个请求作为函数参数。)
答案 1 :(得分:0)
看起来变量标记的范围不是全局的。你已经在初始ajax请求的成功函数范围内定义了它