如何通过JSONP或HTTP代理访问Rally REST API的JSON响应?

ris*_*raj 2 api ajax jquery jsonp rally

这是我在Stackoverflow上的第一篇文章,虽然多年来我一直是常客!

我们有一个用ASP编写的内部缺陷跟踪应用程序.我们有一个手动过程,我们将所有相关的Rally User故事信息复制到我们网站的"规格"部分.我试图通过使用JQuery和JSON在我们的网站中动态显示此信息.在我在ASP页面中使用它之前,我正在使用XAMPP在我的本地计算机上测试它.

尝试通过JQuery访问API时,我遇到了Access-Control-Allow-Origin异常.我试图加载的示例页面是: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>
Run Code Online (Sandbox Code Playgroud)

这将加载到以下下拉列表中:

<select name="projectSelect" id="dd_projSel"></select>
Run Code Online (Sandbox Code Playgroud)

根据Rally API文档https://rally1.rallydev.com/slm/doc/webservice/rest_json.jsp中的此页面,为了绕过此限制,我们应该使用HTTP代理或使用JSONP回调功能.我尝试在我的页面()中包含Yahoo API,并尝试使用Rally API示例页面上显示的一些代码,但是无法使其工作.

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);
Run Code Online (Sandbox Code Playgroud)

我也尝试过包含JSONP响应变量,就像他们在文档中提到的那样,但是还没能让它工作:

有没有人成功使用代理方法或JSONP方法?我假设JSONP方法更容易上班; 是这样的吗?如果没有,有人可以帮助指导我如何为此用途设置HTTP代理的资源吗?

如果JSONP方法更容易,我该如何使它工作?有没有人有可以共享的工作示例?

很抱歉这么长 - 我觉得最好是展示我一直在尝试的东西,以及我从哪里获取我的信息.

非常感谢!

And*_*yer 7

以下是使用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>
Run Code Online (Sandbox Code Playgroud)

dataType配置告诉jQuery的使用JSONP.该jsonp配置告诉jQuery来使用"JSONP"作为请求PARAM而不是默认的"回调",因为拉力赛API使用"JSONP".