Я использую jQuery для создания запроса к Поиску Твиттера API. Я использую jsonp, как необходим для междоменных запросов. Однако Программный интерфейс Твиттера указывает, что Вы должны установить уникальный Агент пользователя для этих запросов и ограничиваете Ваши запросы, если Вы не делаете. Проблема, я не вижу способа установить этот заголовок с помощью jQuery.
Это - код, который я использую:
$.ajax({
url: 'http://search.twitter.com/search.json',
dataType: 'jsonp',
type: 'get',
data: { q: 'twitter' },
success: function(data) {
alert(data.results);
}
});
Я попытался использовать beforeSend метод, но кажется, что это событие не стреляет. Кто-либо может придумать какой-либо способ решить эту проблему?
Спасибо.
JSON с заполнением работает путем добавления на страницу элемента сценария с атрибутом src , указывающим на URL-адрес веб-службы. Затем веб-служба возвращает сценарий, содержащий данные, заключенные в функцию обратного вызова, которая выполняется, когда сценарий завершает синтаксический анализ. Это не столько JSON (для начала, он даже не должен быть действительным JSON), сколько простой JavaScript.
К сожалению, изменить заголовки, отправленные для элемента скрипта, добавленного на вашу страницу, невозможно. Единственное, что вы можете сделать, это проверить метод получения данных, совместимый с разными источниками, например:
XMLHttpRequest Level 2 - Chrome, Safari 4+, Firefox 3.5+, Opera
// Поддерживается ли XMLHttpRequest Level 2?
if ("withCredentials" в новом XMLHttpRequest ())
XDomainRequest - для IE 8, IE 9
// Поддерживается ли XDomainRequest?
if ("XDomainRequest" в окне)
Было бы неплохо протестировать эти реализации, если они существуют, и использовать их соответственно, вернувшись к стандартному JSONP для неподдерживаемых или старых браузеров.
Также возможно (но маловероятно, учитывая высокий статус), что веб-служба не настроена для разрешения запросов из разных источников, поэтому вам все равно придется вернуться к JSONP, если запрос не удастся. См. Также Совместное использование ресурсов между источниками .