【发布时间】:2013-10-12 12:24:45
【问题描述】:
我已经为解决这个问题奋斗了 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 文件目前驻留在我的本地计算机上,但最终可能会驻留在 wiki 上。三个 url 的控制台输出列在代码之后。
如何在浏览器中直接输入 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 @987654322@. Origin null is not allowed by Access-Control-Allow-Origin.
url2 -> Uncaught SyntaxError: Unexpected token : json:1
url3 -> Uncaught SyntaxError: Unexpected token : json:1
【问题讨论】:
-
您可能遇到了同源问题。如果访问页面的 URL 与 Jenkins 服务器的域或端口号不同,浏览器将不允许。
-
感谢您的 cmets 并回答所有问题,但我很确定可以在这里做我想做的事情,因为 Jenkins REST API 使 JSONP 能够绕过同源政策。关于我应该如何在我的脚本中指定回调函数以及我调用 $.getJSON 的 URL 有一个详细的第二个答案(下面有 cmets) - 有人删除了吗?我想留在这里,因为它暗示了与上面可能重复的链接不同的东西 - 谢谢。
-
我根据 user2736012 的 cmets 更正了我的答案并取消了删除。
-
您需要使用您的开发者控制台查看请求/响应并查看响应的内容。因为在发出 JSONP 请求时它是一个 SyntaxError,所以发送的响应很可能没有正确格式化为 JSONP。
标签: javascript json rest jenkins jsonp