Изменить заголовки HTTP для запроса JSONP
Я использую jquery для создания запроса к API поиска Twitter. Я использую jsonp, так как это необходимо для междоменных запросов. Тем не менее, API Twitter указывает, что вы должны установить уникальный User-Agent для этих запросов, и ограничивает ваши запросы, если вы этого не делаете. Проблема в том, что я не вижу способа установить этот заголовок через jquery.
Это код, который я использую:
$.ajax({
url: 'http://search.twitter.com/search.json',
dataType: 'jsonp',
type: 'get',
data: { q: 'twitter' },
success: function(data) {
alert(data.results);
}
});
Я пытался использовать метод beforeSend, но похоже, что это событие не запускается. Может кто-нибудь придумать способ решить эту проблему?
Благодарю.
2 ответа
JSON with Padding работает путем добавления элемента script на страницу с атрибутом src, указывающим на URL-адрес веб-службы. Затем веб-служба возвращает сценарий, содержащий данные, помещенные в функцию обратного вызова, которая выполняется, когда сценарий завершает анализ. Это не столько JSON (для начала это даже необязательно должен быть действительный JSON), сколько обычный JavaScript.
К сожалению, нет способа изменить заголовки, отправленные для элемента скрипта, который добавлен на вашу страницу. Единственное, что вы можете сделать, это проверить совместимый метод извлечения данных, совместимый с разными источниками, например:
XMLHttpRequest Уровень 2 - Chrome, Safari 4+, Firefox 3.5+, Opera
// Is XMLHttpRequest Level 2 supported? if ("withCredentials" in new XMLHttpRequest())
XDomainRequest - для IE 8, IE 9
// Is XDomainRequest supported? if ("XDomainRequest" in window)
Было бы неплохо проверить эти реализации, если они существуют, и использовать их соответствующим образом, возвращаясь к стандартному JSONP для неподдерживаемых или более старых браузеров.
Также возможно (но маловероятно, учитывая, что это высокий профиль), что веб-служба не настроена для разрешения запросов из разных источников, поэтому вам, возможно, все равно придется использовать JSONP в случае сбоя запроса. Смотрите также, Обмен ресурсами между источниками.
Попробуй это:
// OAuth configurations
var config = {
'client_id': 'xxxxxx.apps.googleusercontent.com',
'scope': 'https://www.google.com/m8/feeds/contacts/default/full'
};
gapi.auth.authorize(config, function(data) {
// login complete - now get token
var token = gapi.auth.getToken();
token.alt = 'json';
// retrieve contacts
jQuery.ajax({
url: 'https://www.google.com/m8/feeds/contacts/default/full/?max-results=999999',
dataType: 'jsonp',
data: token,
success: function(data) { successGmail(data); }
});
});
Я нашел его там: https://groups.google.com/d/msg/google-api-javascript-client/GuFxPzqQ9-0/hZpo041UaH4J