【问题标题】:How to get JIRA ticket status using jQuery如何使用 jQuery 获取 JIRA 票证状态
【发布时间】:2017-07-25 23:10:45
【问题描述】:

我试过了

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

请提出一些建议。 提前感谢

【问题讨论】:

  • 您应该检查从 atlassian api 返回的数据。它可能不是 JSONP。您应该尝试使用 dataType: 'json' 来运行您的代码。
  • @reinierkors 现在收到此错误 XMLHttpRequest cannot load ****/rest/api/2/issue/TICKET-207?fields=status。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost' 不允许访问。响应的 HTTP 状态代码为 404。
  • 这是 Web 浏览器的一项安全功能,称为同源策略。您不能对与加载 JavaScript 的域不同的 URL 进行 AJAX 调用(即具有“相同的来源”)。

标签: jquery jira-rest-api


【解决方案1】:

它不起作用,因为您缺少正确使用 jira rest api 的身份验证。在进行任何其他查询之前,您可以使用 3 种方法向 jira 验证自己的身份:基本、基于 cookie 和 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 来执行我的查询。 基本身份验证操作需要此标头信息才能使我的所有请求正常工作。

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

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 我是新手,请告诉我如何在代码中使用它 curl -D- -u yourusername:yourpassword -X GET -H "Content-Type: application/json " mydomain.atlassian.net/rest/api/2/issue/…
  • 我已经在 javascript、NJoy 和快乐编码中添加了完整的解决方案!
  • 拒绝执行脚本,因为它的 MIME 类型 ('application/json') 不可执行,并且启用了严格的 MIME 类型检查。
【解决方案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);
}});

【讨论】:

    猜你喜欢
    • 2016-07-12
    • 2016-08-27
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多