如何使用 jQuery 获取 JIRA 票证状态

How to get JIRA ticket status using jQuery

我试过了

var ajaxUrl = 'https://mydomain.atlassian.net/rest/api/2/issue/TICKET-207?fields=status';
        jQuery.ajax({
            url:ajaxUrl,
            dataType: 'jsonp',
            type : "GET",
            success: function(data){
                alert('Sucess data: ' + data);
                var resultdata = JSON.stringify(data);
                console.log('resultdata22: ' + resultdata);
                alert('resultdata: ' + resultdata);

            },
            error: function(data){
                alert('alert error');
            }
       });

但失败了

拒绝执行来自“https://domain.atlassian.net/rest/api/2/issue/TICKET-207?fields=status&callback=jQuery31104841491505141431_1496758817313&_=1496758817314”的脚本,因为它的 MIME 类型 ('application/json') 不可执行,并且启用了严格的 MIME 类型检查。

请提出一些方法。 提前致谢

它不起作用,因为您缺少正确使用 jira rest api 的身份验证。在进行任何其他查询之前,您可以使用 3 种方法对 jira 进行身份验证:基本、cookie-based 和 OAuth。

您可以在位于此处 https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis/jira-rest-api-tutorials/jira-rest-api-example-basic-authentication

的 jira api 文档中找到有关如何为 json 正确实施身份验证的所有详细信息

在我这边,我使用 c# + json 来执行我的查询。 基本身份验证操作需要此 header 信息才能使我的所有请求正常工作。

string authToken = "username:password";

request.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(authToken));

在你的情况下,它可能看起来有点像这样仅通过 https 进行测试(出于安全原因)

这是一个 curl 示例

curl -D- -u yourusername:yourpassword -X GET -H "Content-Type: application/json" https://mydomain.atlassian.net/rest/api/2/issue/TICKET-207?fields=status

这是你的 javascript 添加了 header

var ajaxUrl = 'https://mydomain.atlassian.net/rest/api/2/issue/TICKET-207?fields=status';
        jQuery.ajax({
            url:ajaxUrl,
            dataType: 'jsonp',
            type : "GET",
            beforeSend: function (xhr){
               xhr.setRequestHeader ("Authorization", "Basic " + btoa(username + ":" + password));
            success: function(data){
                alert('Sucess data: ' + data);
                var resultdata = JSON.stringify(data);
                console.log('resultdata22: ' + resultdata);
                alert('resultdata: ' + resultdata);

            },
            error: function(data){
                alert('alert error');
            }
       });


},

谢谢@legrandviking。在您的代码的帮助下,我找到了方法。

function getTicketStatus($ticketID) {
    $username = '******';
    $password = '******';
    $url = "https://domain.atlassian.net/rest/api/2/issue/$ticketID?fields=status";
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    $issue_list = (curl_exec($curl));
    ////echo '$issue_list===' . $issue_list;
    $ticketData = json_decode($issue_list,true);
    $ticketStatus = $ticketData['fields']['status']['name'];
    ///return $ticketData['fields']['status']['name'];
    return $ticketStatus;
}   

if(isset($_GET['id'])&&!empty($_GET['id'])){
    $jiraID = $_GET['id'];
    echo getTicketStatus("$jiraID");    
}

var ticketID = jQuery(this).text();
jQuery(this).addClass(ticketID);

var ajaxUrl = 'jira.php?id=' + ticketID;
jQuery.ajax({
    url:ajaxUrl,
    type : "GET",
    success: function(data){
    alert('data: ' + data);
}});