javascript - 如何使用 javascript 将 jenkins 数据获取到 HTML 页面

标签 javascript jquery json ajax jenkins

我刚刚按照 Jenkins 网站上给出的步骤进行操作。现在我可以使用 http://localhost:8080 登录 Jenkins

当我使用http://localhost:8080/api/json?pretty=true时我可以从本地主机服务器获取 JSON 响应。但是当我尝试将数据获取到 html 页面时,即当我使用 url http://localhost:1234/foldername/file.html 时我无法使用 AJAX 调用获取数据。下面是我用于 AJAX 调用的代码

$.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;
    }

我收到身份验证错误。

最佳答案

根据我对the documentation的理解,Jenkins 建议使用通过 HTTP 基本身份验证提供的用户 API key ,而不是其密码。

现代 jQuery(1.5 或更高版本)还在 jQuery.ajax() 的选项中添加了一个标题字段。

headers: {'Authorization': 'Basic ' + btoa('username:apitoken')}

但是,如果没有这些建议,您在此处描述的内容应该可以正常工作。

我的假设是您遇到了 Same-origin policy因为您的客户端基于浏览器文档,并且来自与 Jenkins 服务器运行不同的源(不同的端口)。您需要添加 CORS headers在您的 Jenkins 服务器上,允许您的页面的域访问 Jenkins 资源,或者让 Jekins API + 您的客户端页面从单一来源托管。

对于此处的示例,您可以使用 CORS Filter Plugin并且需要至少添加如下允许的 header :

Access-Control-Allow-Origins: http://localhost:1234
Access-Control-Allow-Methods: GET, OPTIONS
Access-Control-Allow-Headers: Authorization

在生产中,您可以使用单个源,或者更新源列表以包含仪表板在生产中的位置,或者如果您对同源问题有信心,则可以将 * 作为任何源的通配符。

关于javascript - 如何使用 javascript 将 jenkins 数据获取到 HTML 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494129/

相关文章:

javascript - 如何停止所有当前正在播放的 MediaElement 播放器?

javascript - getJSON 不适用于最新的 jquery,但适用于较旧的 jQuery

android - obj.getJSONArray 未获取 JSON 响应

mysql - 关联关联 : include entity in JSON response

javascript - addParameter javascript(用于xslt)函数不起作用

Javascript - 为什么这个函数值没有在每次调用时重置

jquery - 使用 jQuery 从 JSON 填充表

javascript - 如何使用 phonegap 运行外部 php 脚本?

javascript - 如何远程检查JavaScript应用程序的函数调用堆栈?

javascript - 使用 jQuery 中的 scrollTop 使一个 div 在另一个 div 内垂直滚动