我一直在争取解决这个问题3天并且“谷歌超载” - 请一定帮忙。
我们在http://jenkinsBuild.mycompany.com:8080
上有一个Jenkins构建服务器,所以如果我将这个url输入浏览器......
http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result
...浏览器页面返回显示...
{"result":"SUCCESS"}
现在,根据Jenkins Wiki,“Jenkins为其功能提供了机器可用的远程访问API”,通过REST API支持json和jsonp,我相信这应该绕过任何相同的原始策略问题。
我正在尝试(使用最新的Chrome浏览器)获取相同的json组件{"result":"SUCCESS"}
。
我正在使用带有$.getJSON()
调用的HTML / javascript,如下所述。 HTML文件目前驻留在我的本地计算机上,但最终可能会存在于维基上。代码后面列出了三个URL的控制台输出。
如何通过直接在浏览器中输入网址获得相同的json结果?谢谢你的帮助。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
var url1 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result";
var url2 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result&callback=?";
var url3 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?callback=?&tree=result";
$('button').click(function(){
$.getJSON(url1, function(json) {
$("#reply").append("got callback: " + json);
});
});
});
</script>
</head>
<body>
<button>Get Jenkins</button><br />
<div id="reply">
</div>
</body></html>
三个URL的控制台输出......
url1 -> XMLHttpRequest cannot load http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result. Origin null is not allowed by Access-Control-Allow-Origin.
url2 -> Uncaught SyntaxError: Unexpected token : json:1
url3 -> Uncaught SyntaxError: Unexpected token : json:1
答案 0 :(得分:1)
<强>更新强>
Url1不是有效的jsonp调用,因为它没有指定回调。不确定为什么url2和url3失败。
这是另一种尝试手动指定回调函数名称的方法:
var url2 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result&callback=my_local_javascript_function";
其中my_local_javascript_function是调用浏览器上的javascript代码中的函数。会发生什么是服务器将使用如下所示的脚本进行响应:
my_local_javascript_function({ //json object in here });
该功能需要在您的本地浏览器上可用,然后才能运行。有关JSONP的更多信息,请参阅此处:http://en.wikipedia.org/wiki/JSONP
答案 1 :(得分:0)
ajax调用遵循same origin policy,因此两个文档都需要位于同一个域中 - 而非您的情况,因为调用的页面位于本地计算机上。