将ajax响应设置为全局变量

时间:2010-08-28 14:03:45

标签: jquery ajax

我正在使用ajax trough jquery库搞乱google的apis。 为了使用Google服务API,我需要获取一个向ClientLogin发送请求的身份验证令牌。实际上,我不知道如何将令牌传递给第二个请求。

我已将全局变量标记设置为var token = null;

我在$(document).ready event上拨打了两个请求。

  1. 第一个是https POST 要求google client登录 以获取用户凭证令牌。
  2. 这是第一个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
    
    1. 第二个应该使用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联系请求

    2. 我遇到的问题是当我尝试在第二个请求中设置Google Authentification Header时,令牌设置为null。我已经阅读了link text但这对我不起作用。我现在必须与回调/事件有关,但我无法想象如何做到这一点。

      任何帮助表示赞赏

2 个答案:

答案 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请求的成功函数范围内定义了它