這是我在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方法更容易,我該如何得到它的工作?有沒有人有任何可以共享的工作示例?
對不起,這麼冗長 - 我認爲最好是展示我一直在嘗試的方式以及從哪裏獲取信息。
非常感謝!
謝謝安德魯! – rishimaharaj