Как получить доступ к ответу JSON Rally REST API через JSONP или HTTP-прокси? - PullRequest
2 голосов
/ 03 октября 2011

Это мой первый пост здесь на Stackoverflow, хотя на протяжении многих лет я был частым посетителем!

У нас есть собственное приложение для отслеживания дефектов, написанное на ASP. У нас есть ручной процесс, с помощью которого мы копируем всю необходимую информацию о пользователях Rally в раздел «Технические характеристики» нашего сайта. Я пытаюсь динамически отображать эту информацию на нашем сайте с помощью JQuery и JSON. Прежде чем я запустил его на странице ASP, я тестирую его на локальном компьютере с помощью XAMPP.

Я сталкиваюсь с исключением Access-Control-Allow-Origin при попытке доступа к API через JQuery. Вот пример страницы, которую я пытаюсь загрузить: https://rally1.rallydev.com/slm/webservice/1.26/project.js.

Вот код:

<script>
$(document).ready(function(){

    $.getJSON("https://rally1.rallydev.com/slm/webservice/1.26/project.js", 
        function(data) {

            $.each(data.QueryResult.Results, function(i, result) {
            $("<option>").attr("value", result._refObjectName).text(result._refObjectName).appendTo("#dd_ItSel");
            });
        })
        .success(function() {console.log("dd-It-success"); })
        .error(function() { console.log("dd-It-error");})
        .complete(function() { console.log("dd-It-complete"); })
        ;
});
</script>

Будет загружено следующее выпадающее меню:

<select name="projectSelect" id="dd_projSel"></select>

Согласно этой странице в документации Rally API https://rally1.rallydev.com/slm/doc/webservice/rest_json.jsp,, чтобы обойти это ограничение, мы должны использовать HTTP-прокси или функцию обратного вызова JSONP. Я попытался включить API Yahoo в мою страницу () и попытался использовать некоторый код, который отображается на странице примера API Rally, но не смог заставить это работать.

This page uses the YUI Connect method to submit an asyncrounous request against the JSON REST API. A JavaScript function is used in the request callback to render the object graph below.

var graphContainer = document.getElementById('graph');

var callbacks = {
    success: function(response) {
        drawGraph(document.getElementById('graph'), YAHOO.lang.JSON.parse(response.responseText));
    },
    failure: function() {
         alert('JSON REST API request failed');
         document.getElementById('graph').innerHTML = '';
    }
};

YAHOO.util.Connect.asyncRequest('GET', 'https://rally1.rallydev.com/slm/webservice/1.27/project.js?workspace=https://rally1.rallydev.com/slm/webservice/1.27/workspace/620327365&query=&start=1&pagesize=20', callbacks);

Я также попытался включить переменную ответа JSONP, как они упоминались в документации, но также не смог заставить ее работать:

Кто-нибудь был успешным с методом прокси или методом JSONP? Я предполагаю, что метод JSONP легче заставить работать; это тот случай? Если нет, то может ли кто-нибудь помочь мне подсказать, как настроить HTTP-прокси для этого использования?

Если метод JSONP проще, как мне заставить его работать? У кого-нибудь есть рабочие примеры, которыми можно поделиться?

Извините, что так долго - я подумал, что было бы лучше показать, что я пытался и откуда я получаю информацию.

Большое спасибо!

1 Ответ

7 голосов
/ 03 октября 2011

Вот как вы могли бы сделать запрос с JSONP и jQuery:

<script>

    $(document).ready(function(){

        $.ajax({
          url: "https://rally1.rallydev.com/slm/webservice/1.26/project.js",
          dataType: 'jsonp',
          jsonp: 'jsonp',
          success: function(data, textStatus, jqXHR){
            console.log(data);
            //deal with data here
          }
        });

    });

</script>

Конфигурация dataType указывает jQuery использовать JSONP.Конфигурация jsonp указывает jQuery использовать «jsonp» в качестве параметра запроса вместо «обратного вызова» по умолчанию, поскольку Rally API использует «jsonp».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...