Так как Вы не можете применить пользовательские заголовки на вызовы JSONP, как я выполняю перекрестные доменные запросы И применяю пользовательские заголовки с помощью jQuery?
Я в основном пытаюсь получить доступ к документам Google с 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) {
}
});
Примечание: Цель этого состоит в том, чтобы полностью обойти прикладной уровень. Просто использовать рубин для соединения с Google Data API, но это поднимает много ресурсов, анализирующих подачу все время серверная сторона.
Вы можете использовать клиентскую библиотеку Google JavaScript для запроса API Документов. Хотя он не поставляется с помощниками специально для Документов, его все же можно использовать с большинством 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);
}
};
Подумайте о том, чтобы написать код на стороне сервера, который играет за прокси, и пусть jQuery вызывает его.
curl
. URLConnection
или более удобный Apache HttpClient . WebClient
. Net :: HTTP
. Можно, если это позволяет внешний домен, отправив соответствующий заголовок Access-Control-Allow-Origin
. Затем просто используйте API XMLHttpRequest
в браузерах, которые поддерживают стандартный междоменный API XHR и XDomainRequest
в IE.