Можно ли делать междоменные запросы в Javascript и устанавливать пользовательские заголовки? - PullRequest
5 голосов
/ 19 июня 2010

Так как вы не можете применять настраиваемые заголовки к вызовам 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 ​​для подключения к API данных Google очень просто, но он требует много ресурсов для разбора каналов все время на стороне сервера.

Ответы [ 3 ]

5 голосов
/ 19 июня 2010

Вы можете использовать клиентскую библиотеку Google JavaScript для запроса API Docs.Хотя он не поставляется с помощниками для документов, он все же может использоваться с большинством API, в том числе с документами.Смотрите это сообщение в блоге от сотрудника 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);
    }
};  
​
3 голосов
/ 19 июня 2010

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

  • Если вы используете PHP, используйте curl.
  • Если вы используете Java, используйте URLConnection или более удобный Apache HttpClient .
  • Если вы используете C # /.NET, используйте WebClient.
  • Если вы используете Ruby, используйте Net::HTTP.
0 голосов
/ 19 июня 2010

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

...