我刚刚按照Jenkins网站上的步骤进行操作。现在我可以使用http://localhost:8080
登录Jenkins当我使用http://localhost:8080/api/json?pretty=true时,我可以从我的localhost服务器获得JSON响应。但是当我尝试将数据发送到html页面时,即当我使用url http://localhost:1234/foldername/file.html时,我无法使用AJAX调用获取数据。下面是我用于AJAX Call的代码
$.ajax({
type: 'GET',
url: 'http://localhost:8080/api/json?pretty=true',
dataType: 'json',
//whatever you need
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', make_base_auth('admin', 'admin'));
},
success: function (data){
alert(data);
}
});
function make_base_auth(user, password) {
var tok = user + ':' + password;
var hash = btoa(tok);
return 'Basic ' + hash;
}
我收到了身份验证错误。
答案 0 :(得分:1)
根据我对the documentation的理解,Jenkins建议使用通过HTTP基本身份验证提供的用户API密钥,而不是密码。
现代jQuery(1.5或更高版本)还为jQuery.ajax()的选项添加了标题字段
headers: {'Authorization': 'Basic ' + btoa('username:apitoken')}
但是,如果没有这些建议,你在这里描述的应该没问题。
我的假设是您遇到Same-origin policy,因为您的客户端基于浏览器文档,来自与Jenkins服务器不同的来源(不同的端口)。您需要在Jenkins服务器上添加CORS headers,以允许您的网页访问Jenkins资源,或者让Jekins API +您的客户端页面都来自单一来源。
对于您在此处的示例,您可以使用CORS Filter Plugin并且需要添加标头至少如下所示:
Access-Control-Allow-Origins: http://localhost:1234
Access-Control-Allow-Methods: GET, OPTIONS
Access-Control-Allow-Headers: Authorization
在制作中,您既可以使用单一来源,也可以更新来源列表以包含仪表板生产中的任何位置,或者如果您对同源问题有信心,*作为任何来源的通配符