2011-10-03 36 views
2

這是我在Stackoverflow的第一篇文章,雖然多年來我一直是一個常客!如何通過JSONP或HTTP代理訪問Rally REST API的JSON響應?

我們有一個用ASP編寫的內部缺陷跟蹤應用程序。我們有一個手動過程,通過它我們將所有相關的拉力賽用戶故事信息複製到我們網站的「規格」部分。我試圖通過使用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> 

這將加載到下面的下拉菜單:

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

根據這個頁面拉力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); 

我也曾嘗試包括JSONP響應變量,如他們的文檔中提到,但一直沒能得到它的工作之一:

任何人都已經成功的任一代理方法或JSONP方法?我假設JSONP方法更容易上手;這是怎麼回事?如果沒有,請有人可以幫助我指導一個資源,介紹如何爲此使用設置一個HTTP代理?

如果JSONP方法更容易,我該如何得到它的工作?有沒有人有任何可以共享的工作示例?

對不起,這麼冗長 - 我認爲最好是展示我一直在嘗試的方式以及從哪裏獲取信息。

非常感謝!

回答

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> 

dataType配置告訴jQuery的使用JSONP。 配置告訴jQuery使用'jsonp'作爲請求參數,而不是默認的'回調',因爲Rally API使用'jsonp'。

+0

謝謝安德魯! – rishimaharaj