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

时间:2017-06-06 14:27:52

标签: jquery jira-rest-api

我试过

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类型检查。

请建议某种方式。 谢谢你

2 个答案:

答案 0 :(得分:2)

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

您可以在位于此处的jira api文档中找到有关如何正确实现json身份验证的所有详细信息https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis/jira-rest-api-tutorials/jira-rest-api-example-basic-authentication

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

string authToken = "username:password";

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

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

这是卷曲示例

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

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');
            }
       });


},

答案 1 :(得分:2)

谢谢@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);
}});