установить ответ Ajax в качестве глобальной переменной - PullRequest
2 голосов
/ 28 августа 2010

В настоящее время я использую API Google, используя библиотеку AJAX через JQuery.Чтобы использовать API службы Google, мне нужно получить токен авторизации, отправляющий запрос в ClientLogin.На самом деле, я не знаю, как передать токен во второй запрос.

Я установил токен глобальной переменной как var token = null;

Я вызываю два запроса на $(document).ready event.

  1. Первый - запрос https POST к google clientLogin для получения токена учетных данных пользователя.

Вот код первого запроса 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

Второй должен вызывать API контактов с http GET.

$.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 во втором запросе.Я уже прочитал текст ссылки , но это не работает для меня.Теперь я должен что-то делать с обратным вызовом / событиями, но я не могу понять, как это сделать.

Любая помощь приветствуется

Ответы [ 2 ]

3 голосов
/ 28 августа 2010

Вопрос был обновлен:

Вы переделываете локальную переменную в первом запросе с именем 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 из первого запроса во второй в качестве параметра функции.)

0 голосов
/ 28 августа 2010

похоже, что область действия переменной token не является глобальной.Вы определили это в области действия функции успеха для начального запроса ajax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...