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

Я использую jquery для создания запроса к API поиска Twitter. Я использую jsonp, как это необходимо для междоменных запросов. Однако API Twitter указывает, что вы должны установить уникальный пользовательский агент для этих запросов, и ограничивает ваши запросы, если вы этого не делаете. Проблема в том, что я не вижу способа установить этот заголовок через 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 с заполнением работает, добавляя элемент скрипта на страницу, с src атрибут, указывающий на URL-адрес веб-службы. Затем веб-служба возвращает сценарий, содержащий данные, завернутые в функцию обратного вызова, которая выполняется после завершения синтаксического анализа сценария. Это не столько JSON (для начала он даже не должен быть действительным JSON), сколько простой JavaScript.

невозможно изменить заголовки, отправленные для элемента скрипта, добавленного в ваш страницы, к сожалению. Единственное, что вы можете сделать, это проверить кросс-origin совместимый метод получения данных, таких как:

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


попробуйте это :

// 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