Измените HTTP-заголовки для запроса JSONP

Я использую 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 метод, но кажется, что это событие не стреляет. Кто-либо может придумать какой-либо способ решить эту проблему?

Спасибо.

27
задан hippietrail 22 December 2011 в 09:13
поделиться

1 ответ

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, если запрос не удастся. См. Также Совместное использование ресурсов между источниками .

55
ответ дан 28 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: