Можно ли делать междоменные запросы в Javascript И устанавливать пользовательские заголовки?

StackOverflow https://stackoverflow.com/questions/3073336

Вопрос

Поскольку вы не можете применять пользовательские заголовки к вызовам JSONP, как мне делать междоменные запросы И применять пользовательские заголовки с помощью jQuery?

По сути, я пытаюсь получить доступ к Google docs с помощью jQuery, и мне нужно передать токен аутентификации:

var token = "my-auth-token";
$.ajax({
  url: "http://docs.google.com/feeds/documents/private/full?max-results=1&alt=json",
  dataType: 'json',
  beforeSend: function(xhr) {
    xhr.setRequestHeader("Authorization", "GoogleLogin auth=" + token);
  },
  success: function(data, textStatus, XMLHttpRequest) {
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
  }
});

Примечание:Цель этого состоит в том, чтобы полностью обход прикладного уровня.Использовать ruby для подключения к Google Data API просто, но это отнимает много ресурсов на постоянный анализ каналов на стороне сервера.

Это было полезно?

Решение

Вы можете использовать клиентскую библиотеку JavaScript Google для запроса Docs API.Хотя он не поставляется специально с помощниками для Docs, его все равно можно использовать с большинством API, включая Docs.Видишь это запись в блоге автор - сотрудник Google, который показывает рабочий пример.

Если вы попадаете в бесконечный цикл авторизации, посмотрите это связанный с этим вопрос из групп Google.По сути, файлы cookie устанавливаются недостаточно быстро, поэтому, когда клиентская библиотека JavaScript проверяет, она ничего не находит и перенаправляет на страницу авторизации OAuth.Решение состоит в том, чтобы либо добавить небольшую задержку перед выполнением проверки, либо использовать кнопку входа, которая инициирует авторизацию, вместо того чтобы делать это при загрузке страницы.

Вам также нужно будет добавить на свою страницу любое изображение, которое находится в том же домене.Он может быть скрыт с помощью CSS, при условии, что в DOM.

Используя пример из приведенного выше поста в блоге, я смог получить список своих документов только с помощью JavaScript.Вот модифицированная функция инициализации, которую я использовал, чтобы избавиться от бесконечного цикла авторизации:

function initialize() {
    var scope = 'http://docs.google.com/feeds/';

    if (google.accounts.user.checkLogin(scope)) {
        var service = new google.gdata.client.GoogleService('writely', 'DocList-App-v1.0');   
        service.getFeed(scope + 'documents/private/full/', handleFeed, handleError);  
    } else {
        var loginButton = $("<button>Click here to login</button>");
        loginButton.click(function() {
            var token = google.accounts.user.login(scope); // can ignore returned token  
        });
        $("body").append(loginButton);
    }
};  
​

Другие советы

Подумайте о том, чтобы написать какой-нибудь код на стороне сервера, который воспроизводится для прокси, и позволит jQuery позвонит.

  • Если вы используете PHP, используйте curl.
  • Если вы используете Java, используйте URLConnection или более дешево Apache httpClient..
  • Если вы используете C # /. NET, используйте WebClient.
  • Если вы используете Ruby, используйте Net::HTTP.

Вы можете, пока внешний домен позволяет ему, отправив соответствующую Access-Control-Allow-Origin заголовок Тогда просто используйте XMLHttpRequest API в браузерах, которые поддерживают стандартный кросс-домен XHR API и XDomainRequest в IE.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top