получить данные RESTful, используя метод JQuery ajax()

Я пытаюсь получить информацию из Asana API с помощью метода JQuery.ajax(). Но желаемый результат не возвращается или отображается ошибка.
Вот мой частичный код на JavaScript:

$(document).ready(function () {

    $('#buttonCallAjax').click(function () {
        jQuery.support.cors = true;
            $.ajax(
                {
                    type: "GET",
                    url: "https://app.asana.com/api/1.0/users/me",
                    data: "{}", 
                    contentType: "application/x-www-form-urlencoded; charset=utf-8",
                    dataType: "jsonp",
                    success: function (data) {


                        alert(data);

                    },
                    error: function (msg, url, line) {
                        alert('error trapped in error: function(msg, url, line)');
                        alert('msg = ' + msg + ', url = ' + url + ', line = ' + line);

                    }
                });
        });

    });

Я много читал о методе ajax(), но все же выяснил некоторые параметры этого метода, такие как data, dataType (потому что это междоменный запрос, я использовал jsonp).
Может ли кто-нибудь помочь с успешным получение информации из Asana API?


person lxx22    schedule 01.07.2012    source источник
comment
Я не верю, что их сервис возвращает jsonp по умолчанию. Пожалуйста, проверьте документацию и убедитесь, что она поддерживает jsonp. Я подозреваю, что есть какая-то опция строки запроса, которая сделает это.   -  person Justin Summerlin    schedule 01.07.2012
comment
Используете ли вы средство отладки, такое как Firebug для Firefox? В Chrome тоже есть встроенный. Таким образом, вы можете фактически увидеть, как HTTP-запрос выходит, и он покажет вам код состояния, и вы сможете просмотреть заголовки и тело ответа.   -  person Despertar    schedule 01.07.2012
comment
Похоже, что этот вызов API требует авторизации, и вы не предоставляете никаких   -  person tsukimi    schedule 01.07.2012
comment
Для Despertar: Да, я использую Firebug для Firefox, и с помощью firebug я могу проверить статус 200 OK, а в опции Net в опции ответа есть нужная мне информация. Кроме того, когда у меня есть html, который включает запуск javascript в firefox (я имею в виду нажатие на кнопку), он показывает только msg = [object Object], url = parsererror, line = Error: jQuery172019258527724872776_1341163430791 не был вызван. НО я вижу содержимое, которое хочу, в ответе через firebug. Большое спасибо!!!   -  person lxx22    schedule 01.07.2012
comment
To Tsukimi, да, я думал об этой проблеме, но я не знаю, где добавить авторизацию (Asana API дает каждому пользователю уникальный API-ключ) в методе ajax? Большое спасибо!   -  person lxx22    schedule 01.07.2012


Ответы (2)


Несмотря на то, что API Asana в настоящее время не поддерживает JSONP, если в будущем они это сделают и вам потребуется выполнить аутентификацию, вы можете сделать это с помощью приведенного ниже кода.

$.ajax( {
  url : 'https://app.asana.com/api/1.0/users/me',
  dataType : 'jsonp',
  beforeSend : function(xhr) {
      xhr.setRequestHeader('Authorization', 'Basic ' + btoa(API_KEY + ":"));

  }
);

Функция btoa кодирует в base64, но не поддерживается во всех браузерах, поэтому вам может понадобиться использовать какую-нибудь другую библиотеку, если вам нужна поддержка старых браузеров.

Обновить

Имя пользователя также можно установить напрямую с помощью jQuery без кодирования или настройки заголовков.

 $.ajax( {
  url : 'https://app.asana.com/api/1.0/users/me',
  dataType : 'jsonp',
  username : API_KEY
 });

При использовании JS для доступа к API ваш API_KEY будет отображаться на странице в виде открытого текста. Возможно, это следует делать на стороне сервера.

person tsukimi    schedule 02.07.2012

После небольшого исследования не похоже, что API Asana прямо сейчас поддерживает возврат JSONP.

Кроме того, после некоторых моих собственных исследований, похоже, что они также не поддерживают CORS, поэтому о XHR с перекрестным происхождением не может быть и речи. Конечно, я не тестировал надлежащую аутентификацию, и их служба может быть настроена на предоставление заголовков CORS только авторизованным запросам.

В качестве альтернативы вы можете создать сценарий на стороне сервера, который выдает общий веб-запрос к API и проксирует результаты обратно в ваш пользовательский интерфейс.

person Justin Summerlin    schedule 01.07.2012
comment
добавить CORS в ответы вашего сервера для авторизации запросов XHR к службе API Asana? Вы имеете в виду добавить jQuery.support.cors = true, иначе я не понял, что вы имеете в виду о добавлении CORS. Большое спасибо. - person lxx22; 02.07.2012
comment
Извините, я был сбит с толку. CORS — это заголовки, которые их служба может установить, что позволяет браузерам выполнять запросы XHR к другому домену. Но мне кажется, они и это не поддерживают. - person Justin Summerlin; 02.07.2012