2 Stimmen

Wie kann man auf die JSON-Antwort der Rally REST API entweder über JSONP oder HTTP Proxy zugreifen?

Dies ist mein erster Beitrag hier auf Stackoverflow, obwohl ich über die Jahre hinweg ein häufiger Besucher war!

Wir haben eine interne Anwendung zur Fehlerverfolgung, die in ASP. Wir haben einen manuellen Prozess, mit dem wir alle relevanten Rally User Story Informationen in den Abschnitt "Spezifikationen" unserer Website kopieren. Ich versuche, diese Informationen auf unserer Website mit JQuery und JSON dynamisch anzuzeigen. Bevor ich es auf der ASP-Seite zum Laufen bringe, teste ich es auf meinem lokalen Rechner mit XAMPP.

Ich stoße auf die Access-Control-Allow-Origin-Ausnahme, wenn ich versuche, über JQuery auf die API zuzugreifen. Eine Beispielseite, die ich zu laden versuche, ist diese: https://rally1.rallydev.com/slm/webservice/1.26/project.js .

Hier ist der Code:

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

Dies wird in das folgende Dropdown-Menü geladen:

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

Laut dieser Seite in der Rally-API-Dokumentation https://rally1.rallydev.com/slm/doc/webservice/rest_json.jsp Um diese Einschränkung zu umgehen, sollten wir einen HTTP-Proxy verwenden oder die JSONP-Callback-Funktion nutzen. Ich habe versucht, die Yahoo-API in meine Seite einzubinden () und habe versucht, einen Teil des Codes zu verwenden, der auf der Rally-API-Beispielseite angezeigt wird, aber ich konnte dies nicht zum Laufen bringen.

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);

Ich habe auch versucht, einschließlich der JSONP-Antwort-Variable wie sie in der Dokumentation erwähnt, aber nicht in der Lage gewesen, um zu erhalten

Hat jemand entweder mit der Proxy-Methode oder der JSONP-Methode erfolgreich gewesen? Ich gehe davon aus, dass die JSONP-Methode leichter zum Laufen zu bringen ist; ist das der Fall? Wenn nicht, kann mir jemand einen Tipp geben, wie ich einen HTTP-Proxy für diesen Zweck einrichten kann?

Wenn die JSONP-Methode einfacher ist, wie bringe ich das zum Laufen? Hat jemand irgendwelche funktionierenden Beispiele, die geteilt werden können?

Entschuldigen Sie, dass ich mich so lange ausgedehnt habe - ich dachte, es wäre besser zu zeigen, was ich versucht habe und woher ich meine Informationen beziehe.

Vielen Dank!

7voto

Andrew Homeyer Punkte 7547

Hier ist, wie Sie die Anfrage mit JSONP und jQuery machen würde:

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

En dataType config sagt jQuery, dass es JSONP verwenden soll. Die jsonp config weist jQuery an, 'jsonp' als Request-Parameter anstelle des standardmäßigen 'callback' zu verwenden, da die Rally-API 'jsonp' verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X